Passed
Push — master ( a3c0d0...678db7 )
by Cody
06:27 queued 03:12
created
classes/rssutils.php 3 patches
Indentation   +1270 added lines, -1270 removed lines patch added patch discarded remove patch
@@ -1,50 +1,50 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 class RSSUtils {
3
-	public static function calculate_article_hash($article, $pluginhost) {
4
-		$tmp = "";
5
-
6
-		foreach ($article as $k => $v) {
7
-			if ($k != "feed" && isset($v)) {
8
-				$x = strip_tags(is_array($v) ? implode(",", $v) : $v);
9
-
10
-				$tmp .= sha1("$k:" . sha1($x));
11
-			}
12
-		}
13
-
14
-		return sha1(implode(",", $pluginhost->get_plugin_names()) . $tmp);
15
-	}
16
-
17
-	// Strips utf8mb4 characters (i.e. emoji) for mysql
18
-	public static function strip_utf8mb4($str) {
19
-		return preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $str);
20
-	}
21
-
22
-	public static function cleanup_feed_browser() {
23
-		$pdo = Db::pdo();
24
-		$pdo->query("DELETE FROM ttrss_feedbrowser_cache");
25
-	}
26
-
27
-	public static function update_daemon_common($limit = DAEMON_FEED_LIMIT) {
28
-		$schema_version = get_schema_version();
29
-
30
-		if ($schema_version != SCHEMA_VERSION) {
31
-			die("Schema version is wrong, please upgrade the database.\n");
32
-		}
33
-
34
-		$pdo = Db::pdo();
35
-
36
-		if (!SINGLE_USER_MODE && DAEMON_UPDATE_LOGIN_LIMIT > 0) {
37
-			if (DB_TYPE == "pgsql") {
38
-				$login_thresh_qpart = "AND ttrss_users.last_login >= NOW() - INTERVAL '".DAEMON_UPDATE_LOGIN_LIMIT." days'";
39
-			} else {
40
-				$login_thresh_qpart = "AND ttrss_users.last_login >= DATE_SUB(NOW(), INTERVAL ".DAEMON_UPDATE_LOGIN_LIMIT." DAY)";
41
-			}
42
-		} else {
43
-			$login_thresh_qpart = "";
44
-		}
45
-
46
-		if (DB_TYPE == "pgsql") {
47
-			$update_limit_qpart = "AND ((
3
+    public static function calculate_article_hash($article, $pluginhost) {
4
+        $tmp = "";
5
+
6
+        foreach ($article as $k => $v) {
7
+            if ($k != "feed" && isset($v)) {
8
+                $x = strip_tags(is_array($v) ? implode(",", $v) : $v);
9
+
10
+                $tmp .= sha1("$k:" . sha1($x));
11
+            }
12
+        }
13
+
14
+        return sha1(implode(",", $pluginhost->get_plugin_names()) . $tmp);
15
+    }
16
+
17
+    // Strips utf8mb4 characters (i.e. emoji) for mysql
18
+    public static function strip_utf8mb4($str) {
19
+        return preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $str);
20
+    }
21
+
22
+    public static function cleanup_feed_browser() {
23
+        $pdo = Db::pdo();
24
+        $pdo->query("DELETE FROM ttrss_feedbrowser_cache");
25
+    }
26
+
27
+    public static function update_daemon_common($limit = DAEMON_FEED_LIMIT) {
28
+        $schema_version = get_schema_version();
29
+
30
+        if ($schema_version != SCHEMA_VERSION) {
31
+            die("Schema version is wrong, please upgrade the database.\n");
32
+        }
33
+
34
+        $pdo = Db::pdo();
35
+
36
+        if (!SINGLE_USER_MODE && DAEMON_UPDATE_LOGIN_LIMIT > 0) {
37
+            if (DB_TYPE == "pgsql") {
38
+                $login_thresh_qpart = "AND ttrss_users.last_login >= NOW() - INTERVAL '".DAEMON_UPDATE_LOGIN_LIMIT." days'";
39
+            } else {
40
+                $login_thresh_qpart = "AND ttrss_users.last_login >= DATE_SUB(NOW(), INTERVAL ".DAEMON_UPDATE_LOGIN_LIMIT." DAY)";
41
+            }
42
+        } else {
43
+            $login_thresh_qpart = "";
44
+        }
45
+
46
+        if (DB_TYPE == "pgsql") {
47
+            $update_limit_qpart = "AND ((
48 48
 					ttrss_feeds.update_interval = 0
49 49
 					AND ttrss_user_prefs.value != '-1'
50 50
 					AND ttrss_feeds.last_updated < NOW() - CAST((ttrss_user_prefs.value || ' minutes') AS INTERVAL)
@@ -55,8 +55,8 @@  discard block
 block discarded – undo
55 55
 					AND ttrss_user_prefs.value != '-1')
56 56
 				OR (last_updated = '1970-01-01 00:00:00'
57 57
 					AND ttrss_user_prefs.value != '-1'))";
58
-		} else {
59
-			$update_limit_qpart = "AND ((
58
+        } else {
59
+            $update_limit_qpart = "AND ((
60 60
 					ttrss_feeds.update_interval = 0
61 61
 					AND ttrss_user_prefs.value != '-1'
62 62
 					AND ttrss_feeds.last_updated < DATE_SUB(NOW(), INTERVAL CONVERT(ttrss_user_prefs.value, SIGNED INTEGER) MINUTE)
@@ -67,22 +67,22 @@  discard block
 block discarded – undo
67 67
 					AND ttrss_user_prefs.value != '-1')
68 68
 				OR (last_updated = '1970-01-01 00:00:00'
69 69
 					AND ttrss_user_prefs.value != '-1'))";
70
-		}
70
+        }
71 71
 
72
-		// Test if feed is currently being updated by another process.
73
-		if (DB_TYPE == "pgsql") {
74
-			$updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < NOW() - INTERVAL '10 minutes')";
75
-		} else {
76
-			$updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < DATE_SUB(NOW(), INTERVAL 10 MINUTE))";
77
-		}
72
+        // Test if feed is currently being updated by another process.
73
+        if (DB_TYPE == "pgsql") {
74
+            $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < NOW() - INTERVAL '10 minutes')";
75
+        } else {
76
+            $updstart_thresh_qpart = "AND (ttrss_feeds.last_update_started IS NULL OR ttrss_feeds.last_update_started < DATE_SUB(NOW(), INTERVAL 10 MINUTE))";
77
+        }
78 78
 
79
-		$query_limit = $limit ? sprintf("LIMIT %d", $limit) : "";
79
+        $query_limit = $limit ? sprintf("LIMIT %d", $limit) : "";
80 80
 
81
-		// Update the least recently updated feeds first
82
-		$query_order = "ORDER BY last_updated";
83
-		if (DB_TYPE == "pgsql") $query_order .= " NULLS FIRST";
81
+        // Update the least recently updated feeds first
82
+        $query_order = "ORDER BY last_updated";
83
+        if (DB_TYPE == "pgsql") $query_order .= " NULLS FIRST";
84 84
 
85
-		$query = "SELECT DISTINCT ttrss_feeds.feed_url, ttrss_feeds.last_updated
85
+        $query = "SELECT DISTINCT ttrss_feeds.feed_url, ttrss_feeds.last_updated
86 86
 			FROM
87 87
 				ttrss_feeds, ttrss_users, ttrss_user_prefs
88 88
 			WHERE
@@ -94,32 +94,32 @@  discard block
 block discarded – undo
94 94
 				$updstart_thresh_qpart
95 95
 				$query_order $query_limit";
96 96
 
97
-		$res = $pdo->query($query);
97
+        $res = $pdo->query($query);
98 98
 
99
-		$feeds_to_update = array();
100
-		while ($line = $res->fetch()) {
101
-			array_push($feeds_to_update, $line['feed_url']);
102
-		}
99
+        $feeds_to_update = array();
100
+        while ($line = $res->fetch()) {
101
+            array_push($feeds_to_update, $line['feed_url']);
102
+        }
103 103
 
104
-		Debug::log(sprintf("Scheduled %d feeds to update...", count($feeds_to_update)));
104
+        Debug::log(sprintf("Scheduled %d feeds to update...", count($feeds_to_update)));
105 105
 
106
-		// Update last_update_started before actually starting the batch
107
-		// in order to minimize collision risk for parallel daemon tasks
108
-		if (count($feeds_to_update) > 0) {
109
-			$feeds_qmarks = arr_qmarks($feeds_to_update);
106
+        // Update last_update_started before actually starting the batch
107
+        // in order to minimize collision risk for parallel daemon tasks
108
+        if (count($feeds_to_update) > 0) {
109
+            $feeds_qmarks = arr_qmarks($feeds_to_update);
110 110
 
111
-			$tmph = $pdo->prepare("UPDATE ttrss_feeds SET last_update_started = NOW()
111
+            $tmph = $pdo->prepare("UPDATE ttrss_feeds SET last_update_started = NOW()
112 112
 				WHERE feed_url IN ($feeds_qmarks)");
113
-			$tmph->execute($feeds_to_update);
114
-		}
113
+            $tmph->execute($feeds_to_update);
114
+        }
115 115
 
116
-		$nf = 0;
117
-		$bstarted = microtime(true);
116
+        $nf = 0;
117
+        $bstarted = microtime(true);
118 118
 
119
-		$batch_owners = array();
119
+        $batch_owners = array();
120 120
 
121
-		// since we have the data cached, we can deal with other feeds with the same url
122
-		$usth = $pdo->prepare("SELECT DISTINCT ttrss_feeds.id,last_updated,ttrss_feeds.owner_uid
121
+        // since we have the data cached, we can deal with other feeds with the same url
122
+        $usth = $pdo->prepare("SELECT DISTINCT ttrss_feeds.id,last_updated,ttrss_feeds.owner_uid
123 123
 			FROM ttrss_feeds, ttrss_users, ttrss_user_prefs WHERE
124 124
 				ttrss_user_prefs.owner_uid = ttrss_feeds.owner_uid AND
125 125
 				ttrss_users.id = ttrss_user_prefs.owner_uid AND
@@ -130,715 +130,715 @@  discard block
 block discarded – undo
130 130
 				$login_thresh_qpart
131 131
 			ORDER BY ttrss_feeds.id $query_limit");
132 132
 
133
-		foreach ($feeds_to_update as $feed) {
134
-			Debug::log("Base feed: $feed");
133
+        foreach ($feeds_to_update as $feed) {
134
+            Debug::log("Base feed: $feed");
135 135
 
136
-			$usth->execute([$feed]);
137
-			//update_rss_feed($line["id"], true);
136
+            $usth->execute([$feed]);
137
+            //update_rss_feed($line["id"], true);
138 138
 
139
-			if ($tline = $usth->fetch()) {
140
-				Debug::log(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]);
139
+            if ($tline = $usth->fetch()) {
140
+                Debug::log(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]);
141 141
 
142
-				if (array_search($tline["owner_uid"], $batch_owners) === false)
143
-					array_push($batch_owners, $tline["owner_uid"]);
142
+                if (array_search($tline["owner_uid"], $batch_owners) === false)
143
+                    array_push($batch_owners, $tline["owner_uid"]);
144 144
 
145
-				$fstarted = microtime(true);
145
+                $fstarted = microtime(true);
146 146
 
147
-				try {
148
-					RSSUtils::update_rss_feed($tline["id"], true, false);
149
-				} catch (PDOException $e) {
150
-					Logger::get()->log_error(E_USER_NOTICE, $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
147
+                try {
148
+                    RSSUtils::update_rss_feed($tline["id"], true, false);
149
+                } catch (PDOException $e) {
150
+                    Logger::get()->log_error(E_USER_NOTICE, $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
151 151
 
152
-					try {
153
-						$pdo->rollback();
154
-					} catch (PDOException $e) {
155
-						// it doesn't matter if there wasn't actually anything to rollback, PDO Exception can be
156
-						// thrown outside of an active transaction during feed update
157
-					}
158
-				}
152
+                    try {
153
+                        $pdo->rollback();
154
+                    } catch (PDOException $e) {
155
+                        // it doesn't matter if there wasn't actually anything to rollback, PDO Exception can be
156
+                        // thrown outside of an active transaction during feed update
157
+                    }
158
+                }
159 159
 
160
-				Debug::log(sprintf("    %.4f (sec)", microtime(true) - $fstarted));
160
+                Debug::log(sprintf("    %.4f (sec)", microtime(true) - $fstarted));
161 161
 
162
-				++$nf;
163
-			}
164
-		}
162
+                ++$nf;
163
+            }
164
+        }
165 165
 
166
-		if ($nf > 0) {
167
-			Debug::log(sprintf("Processed %d feeds in %.4f (sec), %.4f (sec/feed avg)", $nf,
168
-				microtime(true) - $bstarted, (microtime(true) - $bstarted) / $nf));
169
-		}
166
+        if ($nf > 0) {
167
+            Debug::log(sprintf("Processed %d feeds in %.4f (sec), %.4f (sec/feed avg)", $nf,
168
+                microtime(true) - $bstarted, (microtime(true) - $bstarted) / $nf));
169
+        }
170 170
 
171
-		foreach ($batch_owners as $owner_uid) {
172
-			Debug::log("Running housekeeping tasks for user $owner_uid...");
171
+        foreach ($batch_owners as $owner_uid) {
172
+            Debug::log("Running housekeeping tasks for user $owner_uid...");
173 173
 
174
-			RSSUtils::housekeeping_user($owner_uid);
175
-		}
174
+            RSSUtils::housekeeping_user($owner_uid);
175
+        }
176 176
 
177
-		// Send feed digests by email if needed.
178
-		Digest::send_headlines_digests();
177
+        // Send feed digests by email if needed.
178
+        Digest::send_headlines_digests();
179 179
 
180
-		return $nf;
181
-	}
180
+        return $nf;
181
+    }
182 182
 
183
-	// this is used when subscribing
184
-	public static function set_basic_feed_info($feed) {
183
+    // this is used when subscribing
184
+    public static function set_basic_feed_info($feed) {
185 185
 
186
-		$pdo = Db::pdo();
186
+        $pdo = Db::pdo();
187 187
 
188
-		$sth = $pdo->prepare("SELECT owner_uid,feed_url,auth_pass,auth_login
188
+        $sth = $pdo->prepare("SELECT owner_uid,feed_url,auth_pass,auth_login
189 189
 				FROM ttrss_feeds WHERE id = ?");
190
-		$sth->execute([$feed]);
190
+        $sth->execute([$feed]);
191 191
 
192
-		if ($row = $sth->fetch()) {
192
+        if ($row = $sth->fetch()) {
193 193
 
194
-			$owner_uid = $row["owner_uid"];
195
-			$auth_login = $row["auth_login"];
196
-			$auth_pass = $row["auth_pass"];
197
-			$fetch_url = $row["feed_url"];
194
+            $owner_uid = $row["owner_uid"];
195
+            $auth_login = $row["auth_login"];
196
+            $auth_pass = $row["auth_pass"];
197
+            $fetch_url = $row["feed_url"];
198 198
 
199
-			$pluginhost = new PluginHost();
200
-			$user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
199
+            $pluginhost = new PluginHost();
200
+            $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
201 201
 
202
-			$pluginhost->load(PLUGINS, PluginHost::KIND_ALL);
203
-			$pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
204
-			$pluginhost->load_data();
202
+            $pluginhost->load(PLUGINS, PluginHost::KIND_ALL);
203
+            $pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
204
+            $pluginhost->load_data();
205 205
 
206
-			$basic_info = array();
207
-			foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_BASIC_INFO) as $plugin) {
208
-				$basic_info = $plugin->hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed, $auth_login, $auth_pass);
209
-			}
206
+            $basic_info = array();
207
+            foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_BASIC_INFO) as $plugin) {
208
+                $basic_info = $plugin->hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed, $auth_login, $auth_pass);
209
+            }
210 210
 
211
-			if (!$basic_info) {
212
-				$feed_data = fetch_file_contents($fetch_url, false,
213
-					$auth_login, $auth_pass, false,
214
-					FEED_FETCH_TIMEOUT,
215
-					0);
211
+            if (!$basic_info) {
212
+                $feed_data = fetch_file_contents($fetch_url, false,
213
+                    $auth_login, $auth_pass, false,
214
+                    FEED_FETCH_TIMEOUT,
215
+                    0);
216 216
 
217
-				$feed_data = trim($feed_data);
217
+                $feed_data = trim($feed_data);
218 218
 
219
-				$rss = new FeedParser($feed_data);
220
-				$rss->init();
219
+                $rss = new FeedParser($feed_data);
220
+                $rss->init();
221 221
 
222
-				if (!$rss->error()) {
223
-					$basic_info = array(
224
-						'title' => mb_substr(clean($rss->get_title()), 0, 199),
225
-						'site_url' => mb_substr(rewrite_relative_url($fetch_url, clean($rss->get_link())), 0, 245)
226
-					);
227
-				}
228
-			}
222
+                if (!$rss->error()) {
223
+                    $basic_info = array(
224
+                        'title' => mb_substr(clean($rss->get_title()), 0, 199),
225
+                        'site_url' => mb_substr(rewrite_relative_url($fetch_url, clean($rss->get_link())), 0, 245)
226
+                    );
227
+                }
228
+            }
229 229
 
230
-			if ($basic_info && is_array($basic_info)) {
231
-				$sth = $pdo->prepare("SELECT title, site_url FROM ttrss_feeds WHERE id = ?");
232
-				$sth->execute([$feed]);
230
+            if ($basic_info && is_array($basic_info)) {
231
+                $sth = $pdo->prepare("SELECT title, site_url FROM ttrss_feeds WHERE id = ?");
232
+                $sth->execute([$feed]);
233 233
 
234
-				if ($row = $sth->fetch()) {
234
+                if ($row = $sth->fetch()) {
235 235
 
236
-					$registered_title = $row["title"];
237
-					$orig_site_url = $row["site_url"];
236
+                    $registered_title = $row["title"];
237
+                    $orig_site_url = $row["site_url"];
238 238
 
239
-					if ($basic_info['title'] && (!$registered_title || $registered_title == "[Unknown]")) {
239
+                    if ($basic_info['title'] && (!$registered_title || $registered_title == "[Unknown]")) {
240 240
 
241
-						$sth = $pdo->prepare("UPDATE ttrss_feeds SET
241
+                        $sth = $pdo->prepare("UPDATE ttrss_feeds SET
242 242
 							title = ? WHERE id = ?");
243
-						$sth->execute([$basic_info['title'], $feed]);
244
-					}
243
+                        $sth->execute([$basic_info['title'], $feed]);
244
+                    }
245 245
 
246
-					if ($basic_info['site_url'] && $orig_site_url != $basic_info['site_url']) {
247
-						$sth = $pdo->prepare("UPDATE ttrss_feeds SET
246
+                    if ($basic_info['site_url'] && $orig_site_url != $basic_info['site_url']) {
247
+                        $sth = $pdo->prepare("UPDATE ttrss_feeds SET
248 248
 							site_url = ? WHERE id = ?");
249
-						$sth->execute([$basic_info['site_url'], $feed]);
250
-					}
249
+                        $sth->execute([$basic_info['site_url'], $feed]);
250
+                    }
251 251
 
252
-				}
253
-			}
254
-		}
255
-	}
252
+                }
253
+            }
254
+        }
255
+    }
256 256
 
257
-	/**
258
-	 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
259
-	 */
260
-	public static function update_rss_feed($feed, $no_cache = false) {
257
+    /**
258
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
259
+     */
260
+    public static function update_rss_feed($feed, $no_cache = false) {
261 261
 
262
-		reset_fetch_domain_quota();
262
+        reset_fetch_domain_quota();
263 263
 
264
-		Debug::log("start", Debug::$LOG_VERBOSE);
264
+        Debug::log("start", Debug::$LOG_VERBOSE);
265 265
 
266
-		$pdo = Db::pdo();
266
+        $pdo = Db::pdo();
267 267
 
268
-		$sth = $pdo->prepare("SELECT title, site_url FROM ttrss_feeds WHERE id = ?");
269
-		$sth->execute([$feed]);
268
+        $sth = $pdo->prepare("SELECT title, site_url FROM ttrss_feeds WHERE id = ?");
269
+        $sth->execute([$feed]);
270 270
 
271
-		if (!$row = $sth->fetch()) {
272
-			Debug::log("feed $feed not found, skipping.");
273
-			user_error("Attempt to update unknown/invalid feed $feed", E_USER_WARNING);
274
-			return false;
275
-		}
271
+        if (!$row = $sth->fetch()) {
272
+            Debug::log("feed $feed not found, skipping.");
273
+            user_error("Attempt to update unknown/invalid feed $feed", E_USER_WARNING);
274
+            return false;
275
+        }
276 276
 
277
-		$title = $row["title"];
278
-		$site_url = $row["site_url"];
277
+        $title = $row["title"];
278
+        $site_url = $row["site_url"];
279 279
 
280
-		// feed was batch-subscribed or something, we need to get basic info
281
-		// this is not optimal currently as it fetches stuff separately TODO: optimize
282
-		if ($title == "[Unknown]" || !$title || !$site_url) {
283
-			Debug::log("setting basic feed info for $feed [$title, $site_url]...");
284
-			RSSUtils::set_basic_feed_info($feed);
285
-		}
280
+        // feed was batch-subscribed or something, we need to get basic info
281
+        // this is not optimal currently as it fetches stuff separately TODO: optimize
282
+        if ($title == "[Unknown]" || !$title || !$site_url) {
283
+            Debug::log("setting basic feed info for $feed [$title, $site_url]...");
284
+            RSSUtils::set_basic_feed_info($feed);
285
+        }
286 286
 
287
-		$sth = $pdo->prepare("SELECT id,update_interval,auth_login,
287
+        $sth = $pdo->prepare("SELECT id,update_interval,auth_login,
288 288
 			feed_url,auth_pass,cache_images,
289 289
 			mark_unread_on_update, owner_uid,
290 290
 			auth_pass_encrypted, feed_language,
291 291
 			last_modified,
292 292
 			".SUBSTRING_FOR_DATE."(last_unconditional, 1, 19) AS last_unconditional
293 293
 			FROM ttrss_feeds WHERE id = ?");
294
-		$sth->execute([$feed]);
294
+        $sth->execute([$feed]);
295 295
 
296
-		if ($row = $sth->fetch()) {
296
+        if ($row = $sth->fetch()) {
297 297
 
298
-			$owner_uid = $row["owner_uid"];
299
-			$mark_unread_on_update = $row["mark_unread_on_update"];
298
+            $owner_uid = $row["owner_uid"];
299
+            $mark_unread_on_update = $row["mark_unread_on_update"];
300 300
 
301
-			$sth = $pdo->prepare("UPDATE ttrss_feeds SET last_update_started = NOW()
301
+            $sth = $pdo->prepare("UPDATE ttrss_feeds SET last_update_started = NOW()
302 302
 				WHERE id = ?");
303
-			$sth->execute([$feed]);
303
+            $sth->execute([$feed]);
304 304
 
305
-			$auth_login = $row["auth_login"];
306
-			$auth_pass = $row["auth_pass"];
307
-			$stored_last_modified = $row["last_modified"];
308
-			$last_unconditional = $row["last_unconditional"];
309
-			$cache_images = $row["cache_images"];
310
-			$fetch_url = $row["feed_url"];
305
+            $auth_login = $row["auth_login"];
306
+            $auth_pass = $row["auth_pass"];
307
+            $stored_last_modified = $row["last_modified"];
308
+            $last_unconditional = $row["last_unconditional"];
309
+            $cache_images = $row["cache_images"];
310
+            $fetch_url = $row["feed_url"];
311 311
 
312
-			$feed_language = mb_strtolower($row["feed_language"]);
312
+            $feed_language = mb_strtolower($row["feed_language"]);
313 313
 
314
-			if (!$feed_language)
315
-				$feed_language = mb_strtolower(get_pref('DEFAULT_SEARCH_LANGUAGE', $owner_uid));
314
+            if (!$feed_language)
315
+                $feed_language = mb_strtolower(get_pref('DEFAULT_SEARCH_LANGUAGE', $owner_uid));
316 316
 
317
-			if (!$feed_language)
318
-				$feed_language = 'simple';
317
+            if (!$feed_language)
318
+                $feed_language = 'simple';
319 319
 
320
-		} else {
321
-			return false;
322
-		}
320
+        } else {
321
+            return false;
322
+        }
323 323
 
324
-		$date_feed_processed = date('Y-m-d H:i');
324
+        $date_feed_processed = date('Y-m-d H:i');
325 325
 
326
-		$cache_filename = CACHE_DIR . "/feeds/" . sha1($fetch_url) . ".xml";
326
+        $cache_filename = CACHE_DIR . "/feeds/" . sha1($fetch_url) . ".xml";
327 327
 
328
-		$pluginhost = new PluginHost();
329
-		$user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
328
+        $pluginhost = new PluginHost();
329
+        $user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
330 330
 
331
-		$pluginhost->load(PLUGINS, PluginHost::KIND_ALL);
332
-		$pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
333
-		$pluginhost->load_data();
331
+        $pluginhost->load(PLUGINS, PluginHost::KIND_ALL);
332
+        $pluginhost->load($user_plugins, PluginHost::KIND_USER, $owner_uid);
333
+        $pluginhost->load_data();
334 334
 
335
-		$rss_hash = false;
335
+        $rss_hash = false;
336 336
 
337
-		$force_refetch = isset($_REQUEST["force_refetch"]);
338
-		$feed_data = "";
337
+        $force_refetch = isset($_REQUEST["force_refetch"]);
338
+        $feed_data = "";
339 339
 
340
-		Debug::log("running HOOK_FETCH_FEED handlers...", Debug::$LOG_VERBOSE);
340
+        Debug::log("running HOOK_FETCH_FEED handlers...", Debug::$LOG_VERBOSE);
341 341
 
342
-		foreach ($pluginhost->get_hooks(PluginHost::HOOK_FETCH_FEED) as $plugin) {
343
-			Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
344
-			$start = microtime(true);
345
-			$feed_data = $plugin->hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed, 0, $auth_login, $auth_pass);
346
-			Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
347
-		}
342
+        foreach ($pluginhost->get_hooks(PluginHost::HOOK_FETCH_FEED) as $plugin) {
343
+            Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
344
+            $start = microtime(true);
345
+            $feed_data = $plugin->hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed, 0, $auth_login, $auth_pass);
346
+            Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
347
+        }
348 348
 
349
-		if ($feed_data) {
350
-			Debug::log("feed data has been modified by a plugin.", Debug::$LOG_VERBOSE);
351
-		} else {
352
-			Debug::log("feed data has not been modified by a plugin.", Debug::$LOG_VERBOSE);
353
-		}
349
+        if ($feed_data) {
350
+            Debug::log("feed data has been modified by a plugin.", Debug::$LOG_VERBOSE);
351
+        } else {
352
+            Debug::log("feed data has not been modified by a plugin.", Debug::$LOG_VERBOSE);
353
+        }
354 354
 
355
-		// try cache
356
-		if (!$feed_data &&
357
-			file_exists($cache_filename) &&
358
-			is_readable($cache_filename) &&
359
-			!$auth_login && !$auth_pass &&
360
-			filemtime($cache_filename) > time() - 30) {
355
+        // try cache
356
+        if (!$feed_data &&
357
+            file_exists($cache_filename) &&
358
+            is_readable($cache_filename) &&
359
+            !$auth_login && !$auth_pass &&
360
+            filemtime($cache_filename) > time() - 30) {
361 361
 
362
-			Debug::log("using local cache [$cache_filename].", Debug::$LOG_VERBOSE);
362
+            Debug::log("using local cache [$cache_filename].", Debug::$LOG_VERBOSE);
363 363
 
364
-			@$feed_data = file_get_contents($cache_filename);
364
+            @$feed_data = file_get_contents($cache_filename);
365 365
 
366
-			if ($feed_data) {
367
-				$rss_hash = sha1($feed_data);
368
-			}
366
+            if ($feed_data) {
367
+                $rss_hash = sha1($feed_data);
368
+            }
369 369
 
370
-		} else {
371
-			Debug::log("local cache will not be used for this feed", Debug::$LOG_VERBOSE);
372
-		}
370
+        } else {
371
+            Debug::log("local cache will not be used for this feed", Debug::$LOG_VERBOSE);
372
+        }
373 373
 
374
-		global $fetch_last_modified;
374
+        global $fetch_last_modified;
375 375
 
376
-		// fetch feed from source
377
-		if (!$feed_data) {
378
-			Debug::log("last unconditional update request: $last_unconditional", Debug::$LOG_VERBOSE);
376
+        // fetch feed from source
377
+        if (!$feed_data) {
378
+            Debug::log("last unconditional update request: $last_unconditional", Debug::$LOG_VERBOSE);
379 379
 
380
-			if (ini_get("open_basedir") && function_exists("curl_init")) {
381
-				Debug::log("not using CURL due to open_basedir restrictions", Debug::$LOG_VERBOSE);
382
-			}
380
+            if (ini_get("open_basedir") && function_exists("curl_init")) {
381
+                Debug::log("not using CURL due to open_basedir restrictions", Debug::$LOG_VERBOSE);
382
+            }
383 383
 
384
-			if (time() - strtotime($last_unconditional) > MAX_CONDITIONAL_INTERVAL) {
385
-				Debug::log("maximum allowed interval for conditional requests exceeded, forcing refetch", Debug::$LOG_VERBOSE);
384
+            if (time() - strtotime($last_unconditional) > MAX_CONDITIONAL_INTERVAL) {
385
+                Debug::log("maximum allowed interval for conditional requests exceeded, forcing refetch", Debug::$LOG_VERBOSE);
386 386
 
387
-				$force_refetch = true;
388
-			} else {
389
-				Debug::log("stored last modified for conditional request: $stored_last_modified", Debug::$LOG_VERBOSE);
390
-			}
387
+                $force_refetch = true;
388
+            } else {
389
+                Debug::log("stored last modified for conditional request: $stored_last_modified", Debug::$LOG_VERBOSE);
390
+            }
391 391
 
392
-			Debug::log("fetching [$fetch_url] (force_refetch: $force_refetch)...", Debug::$LOG_VERBOSE);
392
+            Debug::log("fetching [$fetch_url] (force_refetch: $force_refetch)...", Debug::$LOG_VERBOSE);
393 393
 
394
-			$feed_data = fetch_file_contents([
395
-				"url" => $fetch_url,
396
-				"login" => $auth_login,
397
-				"pass" => $auth_pass,
398
-				"timeout" => $no_cache ? FEED_FETCH_NO_CACHE_TIMEOUT : FEED_FETCH_TIMEOUT,
399
-				"last_modified" => $force_refetch ? "" : $stored_last_modified
400
-			]);
394
+            $feed_data = fetch_file_contents([
395
+                "url" => $fetch_url,
396
+                "login" => $auth_login,
397
+                "pass" => $auth_pass,
398
+                "timeout" => $no_cache ? FEED_FETCH_NO_CACHE_TIMEOUT : FEED_FETCH_TIMEOUT,
399
+                "last_modified" => $force_refetch ? "" : $stored_last_modified
400
+            ]);
401 401
 
402
-			$feed_data = trim($feed_data);
402
+            $feed_data = trim($feed_data);
403 403
 
404
-			Debug::log("fetch done.", Debug::$LOG_VERBOSE);
405
-			Debug::log("source last modified: " . $fetch_last_modified, Debug::$LOG_VERBOSE);
404
+            Debug::log("fetch done.", Debug::$LOG_VERBOSE);
405
+            Debug::log("source last modified: " . $fetch_last_modified, Debug::$LOG_VERBOSE);
406 406
 
407
-			if ($feed_data && $fetch_last_modified != $stored_last_modified) {
408
-				$sth = $pdo->prepare("UPDATE ttrss_feeds SET last_modified = ? WHERE id = ?");
409
-				$sth->execute([substr($fetch_last_modified, 0, 245), $feed]);
410
-			}
407
+            if ($feed_data && $fetch_last_modified != $stored_last_modified) {
408
+                $sth = $pdo->prepare("UPDATE ttrss_feeds SET last_modified = ? WHERE id = ?");
409
+                $sth->execute([substr($fetch_last_modified, 0, 245), $feed]);
410
+            }
411 411
 
412
-			// cache vanilla feed data for re-use
413
-			if ($feed_data && !$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/feeds")) {
414
-				$new_rss_hash = sha1($feed_data);
412
+            // cache vanilla feed data for re-use
413
+            if ($feed_data && !$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/feeds")) {
414
+                $new_rss_hash = sha1($feed_data);
415 415
 
416
-				if ($new_rss_hash != $rss_hash) {
417
-					Debug::log("saving $cache_filename", Debug::$LOG_VERBOSE);
418
-					@file_put_contents($cache_filename, $feed_data);
419
-				}
420
-			}
421
-		}
416
+                if ($new_rss_hash != $rss_hash) {
417
+                    Debug::log("saving $cache_filename", Debug::$LOG_VERBOSE);
418
+                    @file_put_contents($cache_filename, $feed_data);
419
+                }
420
+            }
421
+        }
422 422
 
423
-		if (!$feed_data) {
424
-			global $fetch_last_error;
425
-			global $fetch_last_error_code;
423
+        if (!$feed_data) {
424
+            global $fetch_last_error;
425
+            global $fetch_last_error_code;
426 426
 
427
-			Debug::log("unable to fetch: $fetch_last_error [$fetch_last_error_code]", Debug::$LOG_VERBOSE);
427
+            Debug::log("unable to fetch: $fetch_last_error [$fetch_last_error_code]", Debug::$LOG_VERBOSE);
428 428
 
429
-			// If-Modified-Since
430
-			if ($fetch_last_error_code != 304) {
431
-				$error_message = $fetch_last_error;
432
-			} else {
433
-				Debug::log("source claims data not modified, nothing to do.", Debug::$LOG_VERBOSE);
434
-				$error_message = "";
435
-			}
429
+            // If-Modified-Since
430
+            if ($fetch_last_error_code != 304) {
431
+                $error_message = $fetch_last_error;
432
+            } else {
433
+                Debug::log("source claims data not modified, nothing to do.", Debug::$LOG_VERBOSE);
434
+                $error_message = "";
435
+            }
436 436
 
437
-			$sth = $pdo->prepare("UPDATE ttrss_feeds SET last_error = ?,
437
+            $sth = $pdo->prepare("UPDATE ttrss_feeds SET last_error = ?,
438 438
 					last_updated = NOW() WHERE id = ?");
439
-			$sth->execute([$error_message, $feed]);
439
+            $sth->execute([$error_message, $feed]);
440 440
 
441
-			return;
442
-		}
441
+            return;
442
+        }
443 443
 
444
-		Debug::log("running HOOK_FEED_FETCHED handlers...", Debug::$LOG_VERBOSE);
445
-		$feed_data_checksum = md5($feed_data);
444
+        Debug::log("running HOOK_FEED_FETCHED handlers...", Debug::$LOG_VERBOSE);
445
+        $feed_data_checksum = md5($feed_data);
446 446
 
447
-		foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_FETCHED) as $plugin) {
448
-			Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
449
-			$start = microtime(true);
450
-			$feed_data = $plugin->hook_feed_fetched($feed_data, $fetch_url, $owner_uid, $feed);
451
-			Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
452
-		}
447
+        foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_FETCHED) as $plugin) {
448
+            Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
449
+            $start = microtime(true);
450
+            $feed_data = $plugin->hook_feed_fetched($feed_data, $fetch_url, $owner_uid, $feed);
451
+            Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
452
+        }
453 453
 
454
-		if (md5($feed_data) != $feed_data_checksum) {
455
-			Debug::log("feed data has been modified by a plugin.", Debug::$LOG_VERBOSE);
456
-		} else {
457
-			Debug::log("feed data has not been modified by a plugin.", Debug::$LOG_VERBOSE);
458
-		}
454
+        if (md5($feed_data) != $feed_data_checksum) {
455
+            Debug::log("feed data has been modified by a plugin.", Debug::$LOG_VERBOSE);
456
+        } else {
457
+            Debug::log("feed data has not been modified by a plugin.", Debug::$LOG_VERBOSE);
458
+        }
459 459
 
460
-		$rss = new FeedParser($feed_data);
461
-		$rss->init();
460
+        $rss = new FeedParser($feed_data);
461
+        $rss->init();
462 462
 
463
-		if (!$rss->error()) {
463
+        if (!$rss->error()) {
464 464
 
465
-			Debug::log("running HOOK_FEED_PARSED handlers...", Debug::$LOG_VERBOSE);
465
+            Debug::log("running HOOK_FEED_PARSED handlers...", Debug::$LOG_VERBOSE);
466 466
 
467
-			// We use local pluginhost here because we need to load different per-user feed plugins
467
+            // We use local pluginhost here because we need to load different per-user feed plugins
468 468
 
469
-			foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_PARSED) as $plugin) {
470
-				Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
471
-				$start = microtime(true);
472
-				$plugin->hook_feed_parsed($rss);
473
-				Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
474
-			}
469
+            foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_PARSED) as $plugin) {
470
+                Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
471
+                $start = microtime(true);
472
+                $plugin->hook_feed_parsed($rss);
473
+                Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
474
+            }
475 475
 
476
-			Debug::log("language: $feed_language", Debug::$LOG_VERBOSE);
477
-			Debug::log("processing feed data...", Debug::$LOG_VERBOSE);
476
+            Debug::log("language: $feed_language", Debug::$LOG_VERBOSE);
477
+            Debug::log("processing feed data...", Debug::$LOG_VERBOSE);
478 478
 
479
-			if (DB_TYPE == "pgsql") {
480
-				$favicon_interval_qpart = "favicon_last_checked < NOW() - INTERVAL '12 hour'";
481
-			} else {
482
-				$favicon_interval_qpart = "favicon_last_checked < DATE_SUB(NOW(), INTERVAL 12 HOUR)";
483
-			}
479
+            if (DB_TYPE == "pgsql") {
480
+                $favicon_interval_qpart = "favicon_last_checked < NOW() - INTERVAL '12 hour'";
481
+            } else {
482
+                $favicon_interval_qpart = "favicon_last_checked < DATE_SUB(NOW(), INTERVAL 12 HOUR)";
483
+            }
484 484
 
485
-			$sth = $pdo->prepare("SELECT owner_uid,favicon_avg_color,
485
+            $sth = $pdo->prepare("SELECT owner_uid,favicon_avg_color,
486 486
 				(favicon_last_checked IS NULL OR $favicon_interval_qpart) AS
487 487
 						favicon_needs_check
488 488
 				FROM ttrss_feeds WHERE id = ?");
489
-			$sth->execute([$feed]);
489
+            $sth->execute([$feed]);
490 490
 
491
-			if ($row = $sth->fetch()) {
492
-				$favicon_needs_check = $row["favicon_needs_check"];
493
-				$favicon_avg_color = $row["favicon_avg_color"];
494
-				$owner_uid = $row["owner_uid"];
495
-			} else {
496
-				return false;
497
-			}
491
+            if ($row = $sth->fetch()) {
492
+                $favicon_needs_check = $row["favicon_needs_check"];
493
+                $favicon_avg_color = $row["favicon_avg_color"];
494
+                $owner_uid = $row["owner_uid"];
495
+            } else {
496
+                return false;
497
+            }
498 498
 
499
-			$site_url = mb_substr(rewrite_relative_url($fetch_url, clean($rss->get_link())), 0, 245);
499
+            $site_url = mb_substr(rewrite_relative_url($fetch_url, clean($rss->get_link())), 0, 245);
500 500
 
501
-			Debug::log("site_url: $site_url", Debug::$LOG_VERBOSE);
502
-			Debug::log("feed_title: " . clean($rss->get_title()), Debug::$LOG_VERBOSE);
501
+            Debug::log("site_url: $site_url", Debug::$LOG_VERBOSE);
502
+            Debug::log("feed_title: " . clean($rss->get_title()), Debug::$LOG_VERBOSE);
503 503
 
504
-			if ($favicon_needs_check || $force_refetch) {
504
+            if ($favicon_needs_check || $force_refetch) {
505 505
 
506
-				/* terrible hack: if we crash on floicon shit here, we won't check
506
+                /* terrible hack: if we crash on floicon shit here, we won't check
507 507
 				 * the icon avgcolor again (unless the icon got updated) */
508 508
 
509
-				$favicon_file = ICONS_DIR . "/$feed.ico";
510
-				$favicon_modified = @filemtime($favicon_file);
509
+                $favicon_file = ICONS_DIR . "/$feed.ico";
510
+                $favicon_modified = @filemtime($favicon_file);
511 511
 
512
-				Debug::log("checking favicon...", Debug::$LOG_VERBOSE);
512
+                Debug::log("checking favicon...", Debug::$LOG_VERBOSE);
513 513
 
514
-				RSSUtils::check_feed_favicon($site_url, $feed);
515
-				$favicon_modified_new = @filemtime($favicon_file);
514
+                RSSUtils::check_feed_favicon($site_url, $feed);
515
+                $favicon_modified_new = @filemtime($favicon_file);
516 516
 
517
-				if ($favicon_modified_new > $favicon_modified)
518
-					$favicon_avg_color = '';
517
+                if ($favicon_modified_new > $favicon_modified)
518
+                    $favicon_avg_color = '';
519 519
 
520
-				$favicon_colorstring = "";
521
-				if (file_exists($favicon_file) && function_exists("imagecreatefromstring") && $favicon_avg_color == '') {
522
-					require_once "colors.php";
520
+                $favicon_colorstring = "";
521
+                if (file_exists($favicon_file) && function_exists("imagecreatefromstring") && $favicon_avg_color == '') {
522
+                    require_once "colors.php";
523 523
 
524
-					$sth = $pdo->prepare("UPDATE ttrss_feeds SET favicon_avg_color = 'fail' WHERE
524
+                    $sth = $pdo->prepare("UPDATE ttrss_feeds SET favicon_avg_color = 'fail' WHERE
525 525
 							id = ?");
526
-					$sth->execute([$feed]);
526
+                    $sth->execute([$feed]);
527 527
 
528
-					$favicon_color = calculate_avg_color($favicon_file);
528
+                    $favicon_color = calculate_avg_color($favicon_file);
529 529
 
530
-					$favicon_colorstring = ",favicon_avg_color = " . $pdo->quote($favicon_color);
530
+                    $favicon_colorstring = ",favicon_avg_color = " . $pdo->quote($favicon_color);
531 531
 
532
-				} else if ($favicon_avg_color == 'fail') {
533
-					Debug::log("floicon failed on this file, not trying to recalculate avg color", Debug::$LOG_VERBOSE);
534
-				}
532
+                } else if ($favicon_avg_color == 'fail') {
533
+                    Debug::log("floicon failed on this file, not trying to recalculate avg color", Debug::$LOG_VERBOSE);
534
+                }
535 535
 
536
-				$sth = $pdo->prepare("UPDATE ttrss_feeds SET favicon_last_checked = NOW()
536
+                $sth = $pdo->prepare("UPDATE ttrss_feeds SET favicon_last_checked = NOW()
537 537
 					$favicon_colorstring WHERE id = ?");
538
-				$sth->execute([$feed]);
539
-			}
538
+                $sth->execute([$feed]);
539
+            }
540 540
 
541
-			Debug::log("loading filters & labels...", Debug::$LOG_VERBOSE);
541
+            Debug::log("loading filters & labels...", Debug::$LOG_VERBOSE);
542 542
 
543
-			$filters = RSSUtils::load_filters($feed, $owner_uid);
543
+            $filters = RSSUtils::load_filters($feed, $owner_uid);
544 544
 
545
-			if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
546
-				print_r($filters);
547
-			}
545
+            if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
546
+                print_r($filters);
547
+            }
548 548
 
549
-			Debug::log("" . count($filters) . " filters loaded.", Debug::$LOG_VERBOSE);
549
+            Debug::log("" . count($filters) . " filters loaded.", Debug::$LOG_VERBOSE);
550 550
 
551
-			$items = $rss->get_items();
551
+            $items = $rss->get_items();
552 552
 
553
-			if (!is_array($items)) {
554
-				Debug::log("no articles found.", Debug::$LOG_VERBOSE);
553
+            if (!is_array($items)) {
554
+                Debug::log("no articles found.", Debug::$LOG_VERBOSE);
555 555
 
556
-				$sth = $pdo->prepare("UPDATE ttrss_feeds
556
+                $sth = $pdo->prepare("UPDATE ttrss_feeds
557 557
 					SET last_updated = NOW(), last_unconditional = NOW(), last_error = '' WHERE id = ?");
558
-				$sth->execute([$feed]);
558
+                $sth->execute([$feed]);
559 559
 
560
-				return true; // no articles
561
-			}
560
+                return true; // no articles
561
+            }
562 562
 
563
-			Debug::log("processing articles...", Debug::$LOG_VERBOSE);
563
+            Debug::log("processing articles...", Debug::$LOG_VERBOSE);
564 564
 
565
-			$tstart = time();
565
+            $tstart = time();
566 566
 
567
-			foreach ($items as $item) {
568
-				$pdo->beginTransaction();
567
+            foreach ($items as $item) {
568
+                $pdo->beginTransaction();
569 569
 
570
-				if (Debug::get_loglevel() >= 3) {
571
-					print_r($item);
572
-				}
570
+                if (Debug::get_loglevel() >= 3) {
571
+                    print_r($item);
572
+                }
573 573
 
574
-				if (ini_get("max_execution_time") > 0 && time() - $tstart >= ini_get("max_execution_time") * 0.7) {
575
-					Debug::log("looks like there's too many articles to process at once, breaking out", Debug::$LOG_VERBOSE);
576
-					$pdo->commit();
577
-					break;
578
-				}
574
+                if (ini_get("max_execution_time") > 0 && time() - $tstart >= ini_get("max_execution_time") * 0.7) {
575
+                    Debug::log("looks like there's too many articles to process at once, breaking out", Debug::$LOG_VERBOSE);
576
+                    $pdo->commit();
577
+                    break;
578
+                }
579 579
 
580
-				$entry_guid = strip_tags($item->get_id());
581
-				if (!$entry_guid) $entry_guid = strip_tags($item->get_link());
582
-				if (!$entry_guid) $entry_guid = RSSUtils::make_guid_from_title($item->get_title());
580
+                $entry_guid = strip_tags($item->get_id());
581
+                if (!$entry_guid) $entry_guid = strip_tags($item->get_link());
582
+                if (!$entry_guid) $entry_guid = RSSUtils::make_guid_from_title($item->get_title());
583 583
 
584
-				if (!$entry_guid) {
585
-					$pdo->commit();
586
-					continue;
587
-				}
584
+                if (!$entry_guid) {
585
+                    $pdo->commit();
586
+                    continue;
587
+                }
588 588
 
589
-				$entry_guid = "$owner_uid,$entry_guid";
589
+                $entry_guid = "$owner_uid,$entry_guid";
590 590
 
591
-				$entry_guid_hashed = 'SHA1:' . sha1($entry_guid);
591
+                $entry_guid_hashed = 'SHA1:' . sha1($entry_guid);
592 592
 
593
-				Debug::log("guid $entry_guid / $entry_guid_hashed", Debug::$LOG_VERBOSE);
593
+                Debug::log("guid $entry_guid / $entry_guid_hashed", Debug::$LOG_VERBOSE);
594 594
 
595
-				$entry_timestamp = (int)$item->get_date();
595
+                $entry_timestamp = (int)$item->get_date();
596 596
 
597
-				Debug::log("orig date: " . $item->get_date(), Debug::$LOG_VERBOSE);
597
+                Debug::log("orig date: " . $item->get_date(), Debug::$LOG_VERBOSE);
598 598
 
599
-				$entry_title = strip_tags($item->get_title());
599
+                $entry_title = strip_tags($item->get_title());
600 600
 
601
-				$entry_link = rewrite_relative_url($site_url, clean($item->get_link()));
601
+                $entry_link = rewrite_relative_url($site_url, clean($item->get_link()));
602 602
 
603
-				$entry_language = mb_substr(trim($item->get_language()), 0, 2);
603
+                $entry_language = mb_substr(trim($item->get_language()), 0, 2);
604 604
 
605
-				Debug::log("title $entry_title", Debug::$LOG_VERBOSE);
606
-				Debug::log("link $entry_link", Debug::$LOG_VERBOSE);
607
-				Debug::log("language $entry_language", Debug::$LOG_VERBOSE);
605
+                Debug::log("title $entry_title", Debug::$LOG_VERBOSE);
606
+                Debug::log("link $entry_link", Debug::$LOG_VERBOSE);
607
+                Debug::log("language $entry_language", Debug::$LOG_VERBOSE);
608 608
 
609
-				if (!$entry_title) $entry_title = date("Y-m-d H:i:s", $entry_timestamp);;
609
+                if (!$entry_title) $entry_title = date("Y-m-d H:i:s", $entry_timestamp);;
610 610
 
611
-				$entry_content = $item->get_content();
612
-				if (!$entry_content) $entry_content = $item->get_description();
611
+                $entry_content = $item->get_content();
612
+                if (!$entry_content) $entry_content = $item->get_description();
613 613
 
614
-				if (Debug::get_loglevel() >= 3) {
615
-					print "content: ";
616
-					print htmlspecialchars($entry_content);
617
-					print "\n";
618
-				}
614
+                if (Debug::get_loglevel() >= 3) {
615
+                    print "content: ";
616
+                    print htmlspecialchars($entry_content);
617
+                    print "\n";
618
+                }
619 619
 
620
-				$entry_comments = mb_substr(strip_tags($item->get_comments_url()), 0, 245);
621
-				$num_comments = (int) $item->get_comments_count();
620
+                $entry_comments = mb_substr(strip_tags($item->get_comments_url()), 0, 245);
621
+                $num_comments = (int) $item->get_comments_count();
622 622
 
623
-				$entry_author = strip_tags($item->get_author());
624
-				$entry_guid = mb_substr($entry_guid, 0, 245);
623
+                $entry_author = strip_tags($item->get_author());
624
+                $entry_guid = mb_substr($entry_guid, 0, 245);
625 625
 
626
-				Debug::log("author $entry_author", Debug::$LOG_VERBOSE);
627
-				Debug::log("looking for tags...", Debug::$LOG_VERBOSE);
626
+                Debug::log("author $entry_author", Debug::$LOG_VERBOSE);
627
+                Debug::log("looking for tags...", Debug::$LOG_VERBOSE);
628 628
 
629
-				$entry_tags = $item->get_categories();
630
-				Debug::log("tags found: " . join(", ", $entry_tags), Debug::$LOG_VERBOSE);
629
+                $entry_tags = $item->get_categories();
630
+                Debug::log("tags found: " . join(", ", $entry_tags), Debug::$LOG_VERBOSE);
631 631
 
632
-				Debug::log("done collecting data.", Debug::$LOG_VERBOSE);
632
+                Debug::log("done collecting data.", Debug::$LOG_VERBOSE);
633 633
 
634
-				$sth = $pdo->prepare("SELECT id, content_hash, lang FROM ttrss_entries
634
+                $sth = $pdo->prepare("SELECT id, content_hash, lang FROM ttrss_entries
635 635
 					WHERE guid = ? OR guid = ?");
636
-				$sth->execute([$entry_guid, $entry_guid_hashed]);
637
-
638
-				if ($row = $sth->fetch()) {
639
-					$base_entry_id = $row["id"];
640
-					$entry_stored_hash = $row["content_hash"];
641
-					$article_labels = Article::get_article_labels($base_entry_id, $owner_uid);
642
-
643
-					$existing_tags = Article::get_article_tags($base_entry_id, $owner_uid);
644
-					$entry_tags = array_unique(array_merge($entry_tags, $existing_tags));
645
-				} else {
646
-					$base_entry_id = false;
647
-					$entry_stored_hash = "";
648
-					$article_labels = array();
649
-				}
650
-
651
-				$article = array("owner_uid" => $owner_uid, // read only
652
-					"guid" => $entry_guid, // read only
653
-					"guid_hashed" => $entry_guid_hashed, // read only
654
-					"title" => $entry_title,
655
-					"content" => $entry_content,
656
-					"link" => $entry_link,
657
-					"labels" => $article_labels, // current limitation: can add labels to article, can't remove them
658
-					"tags" => $entry_tags,
659
-					"author" => $entry_author,
660
-					"force_catchup" => false, // ugly hack for the time being
661
-					"score_modifier" => 0, // no previous value, plugin should recalculate score modifier based on content if needed
662
-					"language" => $entry_language,
663
-					"timestamp" => $entry_timestamp,
664
-					"num_comments" => $num_comments,
665
-					"feed" => array("id" => $feed,
666
-						"fetch_url" => $fetch_url,
667
-						"site_url" => $site_url,
668
-						"cache_images" => $cache_images)
669
-				);
670
-
671
-				$entry_plugin_data = "";
672
-				$entry_current_hash = RSSUtils::calculate_article_hash($article, $pluginhost);
673
-
674
-				Debug::log("article hash: $entry_current_hash [stored=$entry_stored_hash]", Debug::$LOG_VERBOSE);
675
-
676
-				if ($entry_current_hash == $entry_stored_hash && !isset($_REQUEST["force_rehash"])) {
677
-					Debug::log("stored article seems up to date [IID: $base_entry_id], updating timestamp only", Debug::$LOG_VERBOSE);
678
-
679
-					// we keep encountering the entry in feeds, so we need to
680
-					// update date_updated column so that we don't get horrible
681
-					// dupes when the entry gets purged and reinserted again e.g.
682
-					// in the case of SLOW SLOW OMG SLOW updating feeds
683
-
684
-					$sth = $pdo->prepare("UPDATE ttrss_entries SET date_updated = NOW()
636
+                $sth->execute([$entry_guid, $entry_guid_hashed]);
637
+
638
+                if ($row = $sth->fetch()) {
639
+                    $base_entry_id = $row["id"];
640
+                    $entry_stored_hash = $row["content_hash"];
641
+                    $article_labels = Article::get_article_labels($base_entry_id, $owner_uid);
642
+
643
+                    $existing_tags = Article::get_article_tags($base_entry_id, $owner_uid);
644
+                    $entry_tags = array_unique(array_merge($entry_tags, $existing_tags));
645
+                } else {
646
+                    $base_entry_id = false;
647
+                    $entry_stored_hash = "";
648
+                    $article_labels = array();
649
+                }
650
+
651
+                $article = array("owner_uid" => $owner_uid, // read only
652
+                    "guid" => $entry_guid, // read only
653
+                    "guid_hashed" => $entry_guid_hashed, // read only
654
+                    "title" => $entry_title,
655
+                    "content" => $entry_content,
656
+                    "link" => $entry_link,
657
+                    "labels" => $article_labels, // current limitation: can add labels to article, can't remove them
658
+                    "tags" => $entry_tags,
659
+                    "author" => $entry_author,
660
+                    "force_catchup" => false, // ugly hack for the time being
661
+                    "score_modifier" => 0, // no previous value, plugin should recalculate score modifier based on content if needed
662
+                    "language" => $entry_language,
663
+                    "timestamp" => $entry_timestamp,
664
+                    "num_comments" => $num_comments,
665
+                    "feed" => array("id" => $feed,
666
+                        "fetch_url" => $fetch_url,
667
+                        "site_url" => $site_url,
668
+                        "cache_images" => $cache_images)
669
+                );
670
+
671
+                $entry_plugin_data = "";
672
+                $entry_current_hash = RSSUtils::calculate_article_hash($article, $pluginhost);
673
+
674
+                Debug::log("article hash: $entry_current_hash [stored=$entry_stored_hash]", Debug::$LOG_VERBOSE);
675
+
676
+                if ($entry_current_hash == $entry_stored_hash && !isset($_REQUEST["force_rehash"])) {
677
+                    Debug::log("stored article seems up to date [IID: $base_entry_id], updating timestamp only", Debug::$LOG_VERBOSE);
678
+
679
+                    // we keep encountering the entry in feeds, so we need to
680
+                    // update date_updated column so that we don't get horrible
681
+                    // dupes when the entry gets purged and reinserted again e.g.
682
+                    // in the case of SLOW SLOW OMG SLOW updating feeds
683
+
684
+                    $sth = $pdo->prepare("UPDATE ttrss_entries SET date_updated = NOW()
685 685
 						WHERE id = ?");
686
-					$sth->execute([$base_entry_id]);
686
+                    $sth->execute([$base_entry_id]);
687 687
 
688
-					$pdo->commit();
689
-					continue;
690
-				}
688
+                    $pdo->commit();
689
+                    continue;
690
+                }
691 691
 
692
-				Debug::log("hash differs, applying plugin filters:", Debug::$LOG_VERBOSE);
692
+                Debug::log("hash differs, applying plugin filters:", Debug::$LOG_VERBOSE);
693 693
 
694
-				foreach ($pluginhost->get_hooks(PluginHost::HOOK_ARTICLE_FILTER) as $plugin) {
695
-					Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
694
+                foreach ($pluginhost->get_hooks(PluginHost::HOOK_ARTICLE_FILTER) as $plugin) {
695
+                    Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
696 696
 
697
-					$start = microtime(true);
698
-					$article = $plugin->hook_article_filter($article);
697
+                    $start = microtime(true);
698
+                    $article = $plugin->hook_article_filter($article);
699 699
 
700
-					Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
700
+                    Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
701 701
 
702
-					$entry_plugin_data .= mb_strtolower(get_class($plugin)) . ",";
703
-				}
702
+                    $entry_plugin_data .= mb_strtolower(get_class($plugin)) . ",";
703
+                }
704 704
 
705 705
                 if (Debug::get_loglevel() >= 3) {
706
-					print "processed content: ";
707
-					print htmlspecialchars($article["content"]);
708
-					print "\n";
709
-				}
706
+                    print "processed content: ";
707
+                    print htmlspecialchars($article["content"]);
708
+                    print "\n";
709
+                }
710 710
 
711
-				Debug::log("plugin data: $entry_plugin_data", Debug::$LOG_VERBOSE);
711
+                Debug::log("plugin data: $entry_plugin_data", Debug::$LOG_VERBOSE);
712 712
 
713
-				// Workaround: 4-byte unicode requires utf8mb4 in MySQL. See https://tt-rss.org/forum/viewtopic.php?f=1&t=3377&p=20077#p20077
714
-				if (DB_TYPE == "mysql" && MYSQL_CHARSET != "UTF8MB4") {
715
-					foreach ($article as $k => $v) {
716
-						// i guess we'll have to take the risk of 4byte unicode labels & tags here
717
-						if (is_string($article[$k])) {
718
-							$article[$k] = RSSUtils::strip_utf8mb4($v);
719
-						}
720
-					}
721
-				}
713
+                // Workaround: 4-byte unicode requires utf8mb4 in MySQL. See https://tt-rss.org/forum/viewtopic.php?f=1&t=3377&p=20077#p20077
714
+                if (DB_TYPE == "mysql" && MYSQL_CHARSET != "UTF8MB4") {
715
+                    foreach ($article as $k => $v) {
716
+                        // i guess we'll have to take the risk of 4byte unicode labels & tags here
717
+                        if (is_string($article[$k])) {
718
+                            $article[$k] = RSSUtils::strip_utf8mb4($v);
719
+                        }
720
+                    }
721
+                }
722 722
 
723
-				/* Collect article tags here so we could filter by them: */
723
+                /* Collect article tags here so we could filter by them: */
724 724
 
725
-				$matched_rules = [];
726
-				$matched_filters = [];
725
+                $matched_rules = [];
726
+                $matched_filters = [];
727 727
 
728
-				$article_filters = RSSUtils::get_article_filters($filters, $article["title"],
729
-					$article["content"], $article["link"], $article["author"],
730
-					$article["tags"], $matched_rules, $matched_filters);
728
+                $article_filters = RSSUtils::get_article_filters($filters, $article["title"],
729
+                    $article["content"], $article["link"], $article["author"],
730
+                    $article["tags"], $matched_rules, $matched_filters);
731 731
 
732
-				// $article_filters should be renamed to something like $filter_actions; actual filter objects are in $matched_filters
733
-				foreach ($pluginhost->get_hooks(PluginHost::HOOK_FILTER_TRIGGERED) as $plugin) {
734
-					$plugin->hook_filter_triggered($feed, $owner_uid, $article, $matched_filters, $matched_rules, $article_filters);
735
-				}
732
+                // $article_filters should be renamed to something like $filter_actions; actual filter objects are in $matched_filters
733
+                foreach ($pluginhost->get_hooks(PluginHost::HOOK_FILTER_TRIGGERED) as $plugin) {
734
+                    $plugin->hook_filter_triggered($feed, $owner_uid, $article, $matched_filters, $matched_rules, $article_filters);
735
+                }
736 736
 
737
-				$matched_filter_ids = array_map(function($f) { return $f['id']; }, $matched_filters);
737
+                $matched_filter_ids = array_map(function($f) { return $f['id']; }, $matched_filters);
738 738
 
739
-				if (count($matched_filter_ids) > 0) {
740
-					$filter_ids_qmarks = arr_qmarks($matched_filter_ids);
739
+                if (count($matched_filter_ids) > 0) {
740
+                    $filter_ids_qmarks = arr_qmarks($matched_filter_ids);
741 741
 
742
-					$fsth = $pdo->prepare("UPDATE ttrss_filters2 SET last_triggered = NOW() WHERE
742
+                    $fsth = $pdo->prepare("UPDATE ttrss_filters2 SET last_triggered = NOW() WHERE
743 743
 							   id IN ($filter_ids_qmarks) AND owner_uid = ?");
744 744
 
745
-					$fsth->execute(array_merge($matched_filter_ids, [$owner_uid]));
746
-				}
745
+                    $fsth->execute(array_merge($matched_filter_ids, [$owner_uid]));
746
+                }
747 747
 
748
-				if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
749
-					Debug::log("matched filters: ", Debug::$LOG_VERBOSE);
748
+                if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
749
+                    Debug::log("matched filters: ", Debug::$LOG_VERBOSE);
750 750
 
751
-					if (count($matched_filters != 0)) {
752
-						print_r($matched_filters);
753
-					}
751
+                    if (count($matched_filters != 0)) {
752
+                        print_r($matched_filters);
753
+                    }
754 754
 
755
-					Debug::log("matched filter rules: ", Debug::$LOG_VERBOSE);
755
+                    Debug::log("matched filter rules: ", Debug::$LOG_VERBOSE);
756 756
 
757
-					if (count($matched_rules) != 0) {
758
-						print_r($matched_rules);
759
-					}
757
+                    if (count($matched_rules) != 0) {
758
+                        print_r($matched_rules);
759
+                    }
760 760
 
761
-					Debug::log("filter actions: ", Debug::$LOG_VERBOSE);
761
+                    Debug::log("filter actions: ", Debug::$LOG_VERBOSE);
762 762
 
763
-					if (count($article_filters) != 0) {
764
-						print_r($article_filters);
765
-					}
766
-				}
763
+                    if (count($article_filters) != 0) {
764
+                        print_r($article_filters);
765
+                    }
766
+                }
767 767
 
768
-				$plugin_filter_names = RSSUtils::find_article_filters($article_filters, "plugin");
769
-				$plugin_filter_actions = $pluginhost->get_filter_actions();
768
+                $plugin_filter_names = RSSUtils::find_article_filters($article_filters, "plugin");
769
+                $plugin_filter_actions = $pluginhost->get_filter_actions();
770 770
 
771
-				if (count($plugin_filter_names) > 0) {
772
-					Debug::log("applying plugin filter actions...", Debug::$LOG_VERBOSE);
771
+                if (count($plugin_filter_names) > 0) {
772
+                    Debug::log("applying plugin filter actions...", Debug::$LOG_VERBOSE);
773 773
 
774
-					foreach ($plugin_filter_names as $pfn) {
775
-						list($pfclass,$pfaction) = explode(":", $pfn["param"]);
774
+                    foreach ($plugin_filter_names as $pfn) {
775
+                        list($pfclass,$pfaction) = explode(":", $pfn["param"]);
776 776
 
777
-						if (isset($plugin_filter_actions[$pfclass])) {
778
-							$plugin = $pluginhost->get_plugin($pfclass);
777
+                        if (isset($plugin_filter_actions[$pfclass])) {
778
+                            $plugin = $pluginhost->get_plugin($pfclass);
779 779
 
780
-							Debug::log("... $pfclass: $pfaction", Debug::$LOG_VERBOSE);
780
+                            Debug::log("... $pfclass: $pfaction", Debug::$LOG_VERBOSE);
781 781
 
782
-							if ($plugin) {
783
-								$start = microtime(true);
784
-								$article = $plugin->hook_article_filter_action($article, $pfaction);
782
+                            if ($plugin) {
783
+                                $start = microtime(true);
784
+                                $article = $plugin->hook_article_filter_action($article, $pfaction);
785 785
 
786
-								Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
787
-							} else {
788
-								Debug::log("??? $pfclass: plugin object not found.", Debug::$LOG_VERBOSE);
789
-							}
790
-						} else {
791
-							Debug::log("??? $pfclass: filter plugin not registered.", Debug::$LOG_VERBOSE);
792
-						}
793
-					}
794
-				}
786
+                                Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
787
+                            } else {
788
+                                Debug::log("??? $pfclass: plugin object not found.", Debug::$LOG_VERBOSE);
789
+                            }
790
+                        } else {
791
+                            Debug::log("??? $pfclass: filter plugin not registered.", Debug::$LOG_VERBOSE);
792
+                        }
793
+                    }
794
+                }
795 795
 
796
-				$entry_tags = $article["tags"];
797
-				$entry_title = strip_tags($article["title"]);
798
-				$entry_author = mb_substr(strip_tags($article["author"]), 0, 245);
799
-				$entry_link = strip_tags($article["link"]);
800
-				$entry_content = $article["content"]; // escaped below
801
-				$entry_force_catchup = $article["force_catchup"];
802
-				$article_labels = $article["labels"];
803
-				$entry_score_modifier = (int) $article["score_modifier"];
804
-				$entry_language = $article["language"];
805
-				$entry_timestamp = $article["timestamp"];
806
-				$num_comments = $article["num_comments"];
796
+                $entry_tags = $article["tags"];
797
+                $entry_title = strip_tags($article["title"]);
798
+                $entry_author = mb_substr(strip_tags($article["author"]), 0, 245);
799
+                $entry_link = strip_tags($article["link"]);
800
+                $entry_content = $article["content"]; // escaped below
801
+                $entry_force_catchup = $article["force_catchup"];
802
+                $article_labels = $article["labels"];
803
+                $entry_score_modifier = (int) $article["score_modifier"];
804
+                $entry_language = $article["language"];
805
+                $entry_timestamp = $article["timestamp"];
806
+                $num_comments = $article["num_comments"];
807 807
 
808
-				if ($entry_timestamp == -1 || !$entry_timestamp || $entry_timestamp > time()) {
809
-					$entry_timestamp = time();
810
-				}
808
+                if ($entry_timestamp == -1 || !$entry_timestamp || $entry_timestamp > time()) {
809
+                    $entry_timestamp = time();
810
+                }
811 811
 
812
-				$entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp);
812
+                $entry_timestamp_fmt = strftime("%Y/%m/%d %H:%M:%S", $entry_timestamp);
813 813
 
814
-				Debug::log("date $entry_timestamp [$entry_timestamp_fmt]", Debug::$LOG_VERBOSE);
815
-				Debug::log("num_comments: $num_comments", Debug::$LOG_VERBOSE);
814
+                Debug::log("date $entry_timestamp [$entry_timestamp_fmt]", Debug::$LOG_VERBOSE);
815
+                Debug::log("num_comments: $num_comments", Debug::$LOG_VERBOSE);
816 816
 
817
-				if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
818
-					Debug::log("article labels:", Debug::$LOG_VERBOSE);
817
+                if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
818
+                    Debug::log("article labels:", Debug::$LOG_VERBOSE);
819 819
 
820
-					if (count($article_labels) != 0) {
821
-						print_r($article_labels);
822
-					}
823
-				}
820
+                    if (count($article_labels) != 0) {
821
+                        print_r($article_labels);
822
+                    }
823
+                }
824 824
 
825
-				Debug::log("force catchup: $entry_force_catchup", Debug::$LOG_VERBOSE);
825
+                Debug::log("force catchup: $entry_force_catchup", Debug::$LOG_VERBOSE);
826 826
 
827
-				if ($cache_images)
828
-					RSSUtils::cache_media($entry_content, $site_url);
827
+                if ($cache_images)
828
+                    RSSUtils::cache_media($entry_content, $site_url);
829 829
 
830
-				$csth = $pdo->prepare("SELECT id FROM ttrss_entries
830
+                $csth = $pdo->prepare("SELECT id FROM ttrss_entries
831 831
 					WHERE guid = ? OR guid = ?");
832
-				$csth->execute([$entry_guid, $entry_guid_hashed]);
832
+                $csth->execute([$entry_guid, $entry_guid_hashed]);
833 833
 
834
-				if (!$row = $csth->fetch()) {
834
+                if (!$row = $csth->fetch()) {
835 835
 
836
-					Debug::log("base guid [$entry_guid or $entry_guid_hashed] not found, creating...", Debug::$LOG_VERBOSE);
836
+                    Debug::log("base guid [$entry_guid or $entry_guid_hashed] not found, creating...", Debug::$LOG_VERBOSE);
837 837
 
838
-					// base post entry does not exist, create it
838
+                    // base post entry does not exist, create it
839 839
 
840
-					$usth = $pdo->prepare(
841
-						"INSERT INTO ttrss_entries
840
+                    $usth = $pdo->prepare(
841
+                        "INSERT INTO ttrss_entries
842 842
 							(title,
843 843
 							guid,
844 844
 							link,
@@ -859,110 +859,110 @@  discard block
 block discarded – undo
859 859
 							NOW(),
860 860
 							?, ?, ?, ?,	?, ?)");
861 861
 
862
-						$usth->execute([$entry_title,
863
-							$entry_guid_hashed,
864
-							$entry_link,
865
-							$entry_timestamp_fmt,
866
-							"$entry_content",
867
-							$entry_current_hash,
868
-							$date_feed_processed,
869
-							$entry_comments,
870
-							(int)$num_comments,
871
-							$entry_plugin_data,
872
-							"$entry_language",
873
-							"$entry_author"]);
862
+                        $usth->execute([$entry_title,
863
+                            $entry_guid_hashed,
864
+                            $entry_link,
865
+                            $entry_timestamp_fmt,
866
+                            "$entry_content",
867
+                            $entry_current_hash,
868
+                            $date_feed_processed,
869
+                            $entry_comments,
870
+                            (int)$num_comments,
871
+                            $entry_plugin_data,
872
+                            "$entry_language",
873
+                            "$entry_author"]);
874 874
 
875
-				}
875
+                }
876 876
 
877
-				$csth->execute([$entry_guid, $entry_guid_hashed]);
877
+                $csth->execute([$entry_guid, $entry_guid_hashed]);
878 878
 
879
-				$entry_ref_id = 0;
880
-				$entry_int_id = 0;
879
+                $entry_ref_id = 0;
880
+                $entry_int_id = 0;
881 881
 
882
-				if ($row = $csth->fetch()) {
882
+                if ($row = $csth->fetch()) {
883 883
 
884
-					Debug::log("base guid found, checking for user record", Debug::$LOG_VERBOSE);
884
+                    Debug::log("base guid found, checking for user record", Debug::$LOG_VERBOSE);
885 885
 
886
-					$ref_id = $row['id'];
887
-					$entry_ref_id = $ref_id;
886
+                    $ref_id = $row['id'];
887
+                    $entry_ref_id = $ref_id;
888 888
 
889
-					if (RSSUtils::find_article_filter($article_filters, "filter")) {
890
-						Debug::log("article is filtered out, nothing to do.", Debug::$LOG_VERBOSE);
891
-						$pdo->commit();
892
-						continue;
893
-					}
889
+                    if (RSSUtils::find_article_filter($article_filters, "filter")) {
890
+                        Debug::log("article is filtered out, nothing to do.", Debug::$LOG_VERBOSE);
891
+                        $pdo->commit();
892
+                        continue;
893
+                    }
894 894
 
895
-					$score = RSSUtils::calculate_article_score($article_filters) + $entry_score_modifier;
895
+                    $score = RSSUtils::calculate_article_score($article_filters) + $entry_score_modifier;
896 896
 
897
-					Debug::log("initial score: $score [including plugin modifier: $entry_score_modifier]", Debug::$LOG_VERBOSE);
897
+                    Debug::log("initial score: $score [including plugin modifier: $entry_score_modifier]", Debug::$LOG_VERBOSE);
898 898
 
899
-					// check for user post link to main table
899
+                    // check for user post link to main table
900 900
 
901
-					$sth = $pdo->prepare("SELECT ref_id, int_id FROM ttrss_user_entries WHERE
901
+                    $sth = $pdo->prepare("SELECT ref_id, int_id FROM ttrss_user_entries WHERE
902 902
 							ref_id = ? AND owner_uid = ?");
903
-					$sth->execute([$ref_id, $owner_uid]);
904
-
905
-					// okay it doesn't exist - create user entry
906
-					if ($row = $sth->fetch()) {
907
-						$entry_ref_id = $row["ref_id"];
908
-						$entry_int_id = $row["int_id"];
909
-
910
-						Debug::log("user record FOUND: RID: $entry_ref_id, IID: $entry_int_id", Debug::$LOG_VERBOSE);
911
-					} else {
912
-
913
-						Debug::log("user record not found, creating...", Debug::$LOG_VERBOSE);
914
-
915
-						if ($score >= -500 && !RSSUtils::find_article_filter($article_filters, 'catchup') && !$entry_force_catchup) {
916
-							$unread = 1;
917
-							$last_read_qpart = null;
918
-						} else {
919
-							$unread = 0;
920
-							$last_read_qpart = date("Y-m-d H:i"); // we can't use NOW() here because it gets quoted
921
-						}
922
-
923
-						if (RSSUtils::find_article_filter($article_filters, 'mark') || $score > 1000) {
924
-							$marked = 1;
925
-						} else {
926
-							$marked = 0;
927
-						}
928
-
929
-						if (RSSUtils::find_article_filter($article_filters, 'publish')) {
930
-							$published = 1;
931
-						} else {
932
-							$published = 0;
933
-						}
934
-
935
-						$last_marked = ($marked == 1) ? 'NOW()' : 'NULL';
936
-						$last_published = ($published == 1) ? 'NOW()' : 'NULL';
937
-
938
-						$sth = $pdo->prepare(
939
-							"INSERT INTO ttrss_user_entries
903
+                    $sth->execute([$ref_id, $owner_uid]);
904
+
905
+                    // okay it doesn't exist - create user entry
906
+                    if ($row = $sth->fetch()) {
907
+                        $entry_ref_id = $row["ref_id"];
908
+                        $entry_int_id = $row["int_id"];
909
+
910
+                        Debug::log("user record FOUND: RID: $entry_ref_id, IID: $entry_int_id", Debug::$LOG_VERBOSE);
911
+                    } else {
912
+
913
+                        Debug::log("user record not found, creating...", Debug::$LOG_VERBOSE);
914
+
915
+                        if ($score >= -500 && !RSSUtils::find_article_filter($article_filters, 'catchup') && !$entry_force_catchup) {
916
+                            $unread = 1;
917
+                            $last_read_qpart = null;
918
+                        } else {
919
+                            $unread = 0;
920
+                            $last_read_qpart = date("Y-m-d H:i"); // we can't use NOW() here because it gets quoted
921
+                        }
922
+
923
+                        if (RSSUtils::find_article_filter($article_filters, 'mark') || $score > 1000) {
924
+                            $marked = 1;
925
+                        } else {
926
+                            $marked = 0;
927
+                        }
928
+
929
+                        if (RSSUtils::find_article_filter($article_filters, 'publish')) {
930
+                            $published = 1;
931
+                        } else {
932
+                            $published = 0;
933
+                        }
934
+
935
+                        $last_marked = ($marked == 1) ? 'NOW()' : 'NULL';
936
+                        $last_published = ($published == 1) ? 'NOW()' : 'NULL';
937
+
938
+                        $sth = $pdo->prepare(
939
+                            "INSERT INTO ttrss_user_entries
940 940
 								(ref_id, owner_uid, feed_id, unread, last_read, marked,
941 941
 								published, score, tag_cache, label_cache, uuid,
942 942
 								last_marked, last_published)
943 943
 							VALUES (?, ?, ?, ?, ?, ?, ?, ?, '', '', '', ".$last_marked.", ".$last_published.")");
944 944
 
945
-						$sth->execute([$ref_id, $owner_uid, $feed, $unread, $last_read_qpart, $marked,
946
-							$published, $score]);
945
+                        $sth->execute([$ref_id, $owner_uid, $feed, $unread, $last_read_qpart, $marked,
946
+                            $published, $score]);
947 947
 
948
-						$sth = $pdo->prepare("SELECT int_id FROM ttrss_user_entries WHERE
948
+                        $sth = $pdo->prepare("SELECT int_id FROM ttrss_user_entries WHERE
949 949
 								ref_id = ? AND owner_uid = ? AND
950 950
 								feed_id = ? LIMIT 1");
951 951
 
952
-						$sth->execute([$ref_id, $owner_uid, $feed]);
952
+                        $sth->execute([$ref_id, $owner_uid, $feed]);
953 953
 
954
-						if ($row = $sth->fetch())
955
-							$entry_int_id = $row['int_id'];
956
-					}
954
+                        if ($row = $sth->fetch())
955
+                            $entry_int_id = $row['int_id'];
956
+                    }
957 957
 
958
-					Debug::log("resulting RID: $entry_ref_id, IID: $entry_int_id", Debug::$LOG_VERBOSE);
958
+                    Debug::log("resulting RID: $entry_ref_id, IID: $entry_int_id", Debug::$LOG_VERBOSE);
959 959
 
960
-					if (DB_TYPE == "pgsql")
961
-						$tsvector_qpart = "tsvector_combined = to_tsvector(:ts_lang, :ts_content),";
962
-					else
963
-						$tsvector_qpart = "";
960
+                    if (DB_TYPE == "pgsql")
961
+                        $tsvector_qpart = "tsvector_combined = to_tsvector(:ts_lang, :ts_content),";
962
+                    else
963
+                        $tsvector_qpart = "";
964 964
 
965
-					$sth = $pdo->prepare("UPDATE ttrss_entries
965
+                    $sth = $pdo->prepare("UPDATE ttrss_entries
966 966
 						SET title = :title,
967 967
 							$tsvector_qpart
968 968
 							content = :content,
@@ -975,634 +975,634 @@  discard block
 block discarded – undo
975 975
 							lang = :lang
976 976
 						WHERE id = :id");
977 977
 
978
-					$params = [":title" => $entry_title,
979
-						":content" => "$entry_content",
980
-						":content_hash" => $entry_current_hash,
981
-						":updated" => $entry_timestamp_fmt,
982
-						":num_comments" => (int)$num_comments,
983
-						":plugin_data" => $entry_plugin_data,
984
-						":author" => "$entry_author",
985
-						":lang" => $entry_language,
986
-						":id" => $ref_id];
987
-
988
-					if (DB_TYPE == "pgsql") {
989
-						$params[":ts_lang"] = $feed_language;
990
-						$params[":ts_content"] = mb_substr(strip_tags($entry_title . " " . $entry_content), 0, 900000);
991
-					}
992
-
993
-					$sth->execute($params);
994
-
995
-					// update aux data
996
-					$sth = $pdo->prepare("UPDATE ttrss_user_entries
978
+                    $params = [":title" => $entry_title,
979
+                        ":content" => "$entry_content",
980
+                        ":content_hash" => $entry_current_hash,
981
+                        ":updated" => $entry_timestamp_fmt,
982
+                        ":num_comments" => (int)$num_comments,
983
+                        ":plugin_data" => $entry_plugin_data,
984
+                        ":author" => "$entry_author",
985
+                        ":lang" => $entry_language,
986
+                        ":id" => $ref_id];
987
+
988
+                    if (DB_TYPE == "pgsql") {
989
+                        $params[":ts_lang"] = $feed_language;
990
+                        $params[":ts_content"] = mb_substr(strip_tags($entry_title . " " . $entry_content), 0, 900000);
991
+                    }
992
+
993
+                    $sth->execute($params);
994
+
995
+                    // update aux data
996
+                    $sth = $pdo->prepare("UPDATE ttrss_user_entries
997 997
 							SET score = ? WHERE ref_id = ?");
998
-					$sth->execute([$score, $ref_id]);
998
+                    $sth->execute([$score, $ref_id]);
999 999
 
1000
-					if ($mark_unread_on_update &&
1001
-						!$entry_force_catchup &&
1002
-						!RSSUtils::find_article_filter($article_filters, 'catchup')) {
1000
+                    if ($mark_unread_on_update &&
1001
+                        !$entry_force_catchup &&
1002
+                        !RSSUtils::find_article_filter($article_filters, 'catchup')) {
1003 1003
 
1004
-						Debug::log("article updated, marking unread as requested.", Debug::$LOG_VERBOSE);
1004
+                        Debug::log("article updated, marking unread as requested.", Debug::$LOG_VERBOSE);
1005 1005
 
1006
-						$sth = $pdo->prepare("UPDATE ttrss_user_entries
1006
+                        $sth = $pdo->prepare("UPDATE ttrss_user_entries
1007 1007
 							SET last_read = null, unread = true WHERE ref_id = ?");
1008
-						$sth->execute([$ref_id]);
1009
-					} else {
1010
-						Debug::log("article updated, but we're forbidden to mark it unread.", Debug::$LOG_VERBOSE);
1011
-					}
1012
-				}
1008
+                        $sth->execute([$ref_id]);
1009
+                    } else {
1010
+                        Debug::log("article updated, but we're forbidden to mark it unread.", Debug::$LOG_VERBOSE);
1011
+                    }
1012
+                }
1013 1013
 
1014
-				Debug::log("assigning labels [other]...", Debug::$LOG_VERBOSE);
1014
+                Debug::log("assigning labels [other]...", Debug::$LOG_VERBOSE);
1015 1015
 
1016
-				foreach ($article_labels as $label) {
1017
-					Labels::add_article($entry_ref_id, $label[1], $owner_uid);
1018
-				}
1016
+                foreach ($article_labels as $label) {
1017
+                    Labels::add_article($entry_ref_id, $label[1], $owner_uid);
1018
+                }
1019 1019
 
1020
-				Debug::log("assigning labels [filters]...", Debug::$LOG_VERBOSE);
1020
+                Debug::log("assigning labels [filters]...", Debug::$LOG_VERBOSE);
1021 1021
 
1022
-				RSSUtils::assign_article_to_label_filters($entry_ref_id, $article_filters,
1023
-					$owner_uid, $article_labels);
1022
+                RSSUtils::assign_article_to_label_filters($entry_ref_id, $article_filters,
1023
+                    $owner_uid, $article_labels);
1024 1024
 
1025
-				Debug::log("looking for enclosures...", Debug::$LOG_VERBOSE);
1025
+                Debug::log("looking for enclosures...", Debug::$LOG_VERBOSE);
1026 1026
 
1027
-				// enclosures
1027
+                // enclosures
1028 1028
 
1029
-				$enclosures = array();
1029
+                $enclosures = array();
1030 1030
 
1031
-				$encs = $item->get_enclosures();
1031
+                $encs = $item->get_enclosures();
1032 1032
 
1033
-				if (is_array($encs)) {
1034
-					foreach ($encs as $e) {
1035
-						$e_item = array(
1036
-							rewrite_relative_url($site_url, $e->link),
1037
-							$e->type, $e->length, $e->title, $e->width, $e->height);
1033
+                if (is_array($encs)) {
1034
+                    foreach ($encs as $e) {
1035
+                        $e_item = array(
1036
+                            rewrite_relative_url($site_url, $e->link),
1037
+                            $e->type, $e->length, $e->title, $e->width, $e->height);
1038 1038
 
1039
-						// Yet another episode of "mysql utf8_general_ci is gimped"
1040
-						if (DB_TYPE == "mysql" && MYSQL_CHARSET != "UTF8MB4") {
1041
-							for ($i = 0; $i < count($e_item); $i++) {
1042
-								if (is_string($e_item[$i])) {
1043
-									$e_item[$i] = RSSUtils::strip_utf8mb4($e_item[$i]);
1044
-								}
1045
-							}
1046
-						}
1039
+                        // Yet another episode of "mysql utf8_general_ci is gimped"
1040
+                        if (DB_TYPE == "mysql" && MYSQL_CHARSET != "UTF8MB4") {
1041
+                            for ($i = 0; $i < count($e_item); $i++) {
1042
+                                if (is_string($e_item[$i])) {
1043
+                                    $e_item[$i] = RSSUtils::strip_utf8mb4($e_item[$i]);
1044
+                                }
1045
+                            }
1046
+                        }
1047 1047
 
1048
-						array_push($enclosures, $e_item);
1049
-					}
1050
-				}
1048
+                        array_push($enclosures, $e_item);
1049
+                    }
1050
+                }
1051 1051
 
1052
-				if ($cache_images)
1053
-					RSSUtils::cache_enclosures($enclosures, $site_url);
1052
+                if ($cache_images)
1053
+                    RSSUtils::cache_enclosures($enclosures, $site_url);
1054 1054
 
1055
-				if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
1056
-					Debug::log("article enclosures:", Debug::$LOG_VERBOSE);
1057
-					print_r($enclosures);
1058
-				}
1055
+                if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
1056
+                    Debug::log("article enclosures:", Debug::$LOG_VERBOSE);
1057
+                    print_r($enclosures);
1058
+                }
1059 1059
 
1060
-				$esth = $pdo->prepare("SELECT id FROM ttrss_enclosures
1060
+                $esth = $pdo->prepare("SELECT id FROM ttrss_enclosures
1061 1061
 						WHERE content_url = ? AND content_type = ? AND post_id = ?");
1062 1062
 
1063
-				$usth = $pdo->prepare("INSERT INTO ttrss_enclosures
1063
+                $usth = $pdo->prepare("INSERT INTO ttrss_enclosures
1064 1064
 							(content_url, content_type, title, duration, post_id, width, height) VALUES
1065 1065
 							(?, ?, ?, ?, ?, ?, ?)");
1066 1066
 
1067
-				foreach ($enclosures as $enc) {
1068
-					$enc_url = $enc[0];
1069
-					$enc_type = $enc[1];
1070
-					$enc_dur = (int)$enc[2];
1071
-					$enc_title = $enc[3];
1072
-					$enc_width = intval($enc[4]);
1073
-					$enc_height = intval($enc[5]);
1067
+                foreach ($enclosures as $enc) {
1068
+                    $enc_url = $enc[0];
1069
+                    $enc_type = $enc[1];
1070
+                    $enc_dur = (int)$enc[2];
1071
+                    $enc_title = $enc[3];
1072
+                    $enc_width = intval($enc[4]);
1073
+                    $enc_height = intval($enc[5]);
1074 1074
 
1075
-					$esth->execute([$enc_url, $enc_type, $entry_ref_id]);
1075
+                    $esth->execute([$enc_url, $enc_type, $entry_ref_id]);
1076 1076
 
1077
-					if (!$esth->fetch()) {
1078
-						$usth->execute([$enc_url, $enc_type, (string)$enc_title, $enc_dur, $entry_ref_id, $enc_width, $enc_height]);
1079
-					}
1080
-				}
1077
+                    if (!$esth->fetch()) {
1078
+                        $usth->execute([$enc_url, $enc_type, (string)$enc_title, $enc_dur, $entry_ref_id, $enc_width, $enc_height]);
1079
+                    }
1080
+                }
1081 1081
 
1082
-				// check for manual tags (we have to do it here since they're loaded from filters)
1082
+                // check for manual tags (we have to do it here since they're loaded from filters)
1083 1083
 
1084
-				foreach ($article_filters as $f) {
1085
-					if ($f["type"] == "tag") {
1084
+                foreach ($article_filters as $f) {
1085
+                    if ($f["type"] == "tag") {
1086 1086
 
1087
-						$manual_tags = trim_array(explode(",", $f["param"]));
1087
+                        $manual_tags = trim_array(explode(",", $f["param"]));
1088 1088
 
1089
-						foreach ($manual_tags as $tag) {
1090
-							array_push($entry_tags, $tag);
1091
-						}
1092
-					}
1093
-				}
1089
+                        foreach ($manual_tags as $tag) {
1090
+                            array_push($entry_tags, $tag);
1091
+                        }
1092
+                    }
1093
+                }
1094 1094
 
1095
-				// Skip boring tags
1095
+                // Skip boring tags
1096 1096
 
1097
-				$boring_tags = trim_array(explode(",", mb_strtolower(get_pref(
1098
-					'BLACKLISTED_TAGS', $owner_uid, ''), 'utf-8')));
1097
+                $boring_tags = trim_array(explode(",", mb_strtolower(get_pref(
1098
+                    'BLACKLISTED_TAGS', $owner_uid, ''), 'utf-8')));
1099 1099
 
1100
-				$filtered_tags = array();
1101
-				$tags_to_cache = array();
1100
+                $filtered_tags = array();
1101
+                $tags_to_cache = array();
1102 1102
 
1103
-				foreach ($entry_tags as $tag) {
1104
-					if (array_search($tag, $boring_tags) === false) {
1105
-						array_push($filtered_tags, $tag);
1106
-					}
1107
-				}
1103
+                foreach ($entry_tags as $tag) {
1104
+                    if (array_search($tag, $boring_tags) === false) {
1105
+                        array_push($filtered_tags, $tag);
1106
+                    }
1107
+                }
1108 1108
 
1109
-				$filtered_tags = array_unique($filtered_tags);
1109
+                $filtered_tags = array_unique($filtered_tags);
1110 1110
 
1111
-				if (Debug::get_loglevel() >= Debug::$LOG_VERBOSE) {
1112
-					Debug::log("filtered tags: " . implode(", ", $filtered_tags), Debug::$LOG_VERBOSE);
1111
+                if (Debug::get_loglevel() >= Debug::$LOG_VERBOSE) {
1112
+                    Debug::log("filtered tags: " . implode(", ", $filtered_tags), Debug::$LOG_VERBOSE);
1113 1113
 
1114
-				}
1114
+                }
1115 1115
 
1116
-				// Save article tags in the database
1116
+                // Save article tags in the database
1117 1117
 
1118
-				if (count($filtered_tags) > 0) {
1118
+                if (count($filtered_tags) > 0) {
1119 1119
 
1120
-					$tsth = $pdo->prepare("SELECT id FROM ttrss_tags
1120
+                    $tsth = $pdo->prepare("SELECT id FROM ttrss_tags
1121 1121
 							WHERE tag_name = ? AND post_int_id = ? AND
1122 1122
 							owner_uid = ? LIMIT 1");
1123 1123
 
1124
-					$usth = $pdo->prepare("INSERT INTO ttrss_tags
1124
+                    $usth = $pdo->prepare("INSERT INTO ttrss_tags
1125 1125
 									(owner_uid,tag_name,post_int_id)
1126 1126
 									VALUES (?, ?, ?)");
1127 1127
 
1128
-					$filtered_tags = FeedItem_Common::normalize_categories($filtered_tags);
1128
+                    $filtered_tags = FeedItem_Common::normalize_categories($filtered_tags);
1129 1129
 
1130
-					foreach ($filtered_tags as $tag) {
1131
-						$tsth->execute([$tag, $entry_int_id, $owner_uid]);
1130
+                    foreach ($filtered_tags as $tag) {
1131
+                        $tsth->execute([$tag, $entry_int_id, $owner_uid]);
1132 1132
 
1133
-						if (!$tsth->fetch()) {
1134
-							$usth->execute([$owner_uid, $tag, $entry_int_id]);
1135
-						}
1133
+                        if (!$tsth->fetch()) {
1134
+                            $usth->execute([$owner_uid, $tag, $entry_int_id]);
1135
+                        }
1136 1136
 
1137
-						array_push($tags_to_cache, $tag);
1138
-					}
1137
+                        array_push($tags_to_cache, $tag);
1138
+                    }
1139 1139
 
1140
-					/* update the cache */
1141
-					$tags_str = join(",", $tags_to_cache);
1140
+                    /* update the cache */
1141
+                    $tags_str = join(",", $tags_to_cache);
1142 1142
 
1143
-					$tsth = $pdo->prepare("UPDATE ttrss_user_entries
1143
+                    $tsth = $pdo->prepare("UPDATE ttrss_user_entries
1144 1144
 						SET tag_cache = ? WHERE ref_id = ?
1145 1145
 						AND owner_uid = ?");
1146
-					$tsth->execute([$tags_str, $entry_ref_id, $owner_uid]);
1147
-				}
1146
+                    $tsth->execute([$tags_str, $entry_ref_id, $owner_uid]);
1147
+                }
1148 1148
 
1149
-				Debug::log("article processed", Debug::$LOG_VERBOSE);
1149
+                Debug::log("article processed", Debug::$LOG_VERBOSE);
1150 1150
 
1151
-				$pdo->commit();
1152
-			}
1151
+                $pdo->commit();
1152
+            }
1153 1153
 
1154
-			Debug::log("purging feed...", Debug::$LOG_VERBOSE);
1154
+            Debug::log("purging feed...", Debug::$LOG_VERBOSE);
1155 1155
 
1156
-			Feeds::purge_feed($feed, 0);
1156
+            Feeds::purge_feed($feed, 0);
1157 1157
 
1158
-			$sth = $pdo->prepare("UPDATE ttrss_feeds
1158
+            $sth = $pdo->prepare("UPDATE ttrss_feeds
1159 1159
 				SET last_updated = NOW(), last_unconditional = NOW(), last_error = '' WHERE id = ?");
1160
-			$sth->execute([$feed]);
1160
+            $sth->execute([$feed]);
1161 1161
 
1162
-		} else {
1162
+        } else {
1163 1163
 
1164
-			$error_msg = mb_substr($rss->error(), 0, 245);
1164
+            $error_msg = mb_substr($rss->error(), 0, 245);
1165 1165
 
1166
-			Debug::log("fetch error: $error_msg", Debug::$LOG_VERBOSE);
1166
+            Debug::log("fetch error: $error_msg", Debug::$LOG_VERBOSE);
1167 1167
 
1168
-			if (count($rss->errors()) > 1) {
1169
-				foreach ($rss->errors() as $error) {
1170
-					Debug::log("+ $error", Debug::$LOG_VERBOSE);
1171
-				}
1172
-			}
1168
+            if (count($rss->errors()) > 1) {
1169
+                foreach ($rss->errors() as $error) {
1170
+                    Debug::log("+ $error", Debug::$LOG_VERBOSE);
1171
+                }
1172
+            }
1173 1173
 
1174
-			$sth = $pdo->prepare("UPDATE ttrss_feeds SET last_error = ?,
1174
+            $sth = $pdo->prepare("UPDATE ttrss_feeds SET last_error = ?,
1175 1175
 				last_updated = NOW(), last_unconditional = NOW() WHERE id = ?");
1176
-			$sth->execute([$error_msg, $feed]);
1176
+            $sth->execute([$error_msg, $feed]);
1177 1177
 
1178
-			unset($rss);
1178
+            unset($rss);
1179 1179
 
1180
-			Debug::log("update failed.", Debug::$LOG_VERBOSE);
1181
-			return false;
1182
-		}
1180
+            Debug::log("update failed.", Debug::$LOG_VERBOSE);
1181
+            return false;
1182
+        }
1183 1183
 
1184
-		Debug::log("update done.", Debug::$LOG_VERBOSE);
1184
+        Debug::log("update done.", Debug::$LOG_VERBOSE);
1185 1185
 
1186
-		return true;
1187
-	}
1186
+        return true;
1187
+    }
1188 1188
 
1189
-	public static function cache_enclosures($enclosures, $site_url) {
1190
-		$cache = new DiskCache("images");
1189
+    public static function cache_enclosures($enclosures, $site_url) {
1190
+        $cache = new DiskCache("images");
1191 1191
 
1192
-		if ($cache->isWritable()) {
1193
-			foreach ($enclosures as $enc) {
1192
+        if ($cache->isWritable()) {
1193
+            foreach ($enclosures as $enc) {
1194 1194
 
1195
-				if (preg_match("/(image|audio|video)/", $enc[1])) {
1196
-					$src = rewrite_relative_url($site_url, $enc[0]);
1195
+                if (preg_match("/(image|audio|video)/", $enc[1])) {
1196
+                    $src = rewrite_relative_url($site_url, $enc[0]);
1197 1197
 
1198
-					$local_filename = sha1($src);
1198
+                    $local_filename = sha1($src);
1199 1199
 
1200
-					Debug::log("cache_enclosures: downloading: $src to $local_filename", Debug::$LOG_VERBOSE);
1200
+                    Debug::log("cache_enclosures: downloading: $src to $local_filename", Debug::$LOG_VERBOSE);
1201 1201
 
1202
-					if (!$cache->exists($local_filename)) {
1202
+                    if (!$cache->exists($local_filename)) {
1203 1203
 
1204
-						global $fetch_last_error_code;
1205
-						global $fetch_last_error;
1204
+                        global $fetch_last_error_code;
1205
+                        global $fetch_last_error;
1206 1206
 
1207
-						$file_content = fetch_file_contents(array("url" => $src,
1208
-							"http_referrer" => $src,
1209
-							"max_size" => MAX_CACHE_FILE_SIZE));
1207
+                        $file_content = fetch_file_contents(array("url" => $src,
1208
+                            "http_referrer" => $src,
1209
+                            "max_size" => MAX_CACHE_FILE_SIZE));
1210 1210
 
1211
-						if ($file_content) {
1212
-							$cache->put($local_filename, $file_content);
1213
-						} else {
1214
-							Debug::log("cache_enclosures: failed with $fetch_last_error_code: $fetch_last_error");
1215
-						}
1216
-					} else if (is_writable($local_filename)) {
1217
-						$cache->touch($local_filename);
1218
-					}
1219
-				}
1220
-			}
1221
-		}
1222
-	}
1211
+                        if ($file_content) {
1212
+                            $cache->put($local_filename, $file_content);
1213
+                        } else {
1214
+                            Debug::log("cache_enclosures: failed with $fetch_last_error_code: $fetch_last_error");
1215
+                        }
1216
+                    } else if (is_writable($local_filename)) {
1217
+                        $cache->touch($local_filename);
1218
+                    }
1219
+                }
1220
+            }
1221
+        }
1222
+    }
1223 1223
 
1224
-	public static function cache_media($html, $site_url) {
1225
-		$cache = new DiskCache("images");
1224
+    public static function cache_media($html, $site_url) {
1225
+        $cache = new DiskCache("images");
1226 1226
 
1227
-		if ($cache->isWritable()) {
1228
-			$doc = new DOMDocument();
1229
-			if ($doc->loadHTML($html)) {
1230
-				$xpath = new DOMXPath($doc);
1227
+        if ($cache->isWritable()) {
1228
+            $doc = new DOMDocument();
1229
+            if ($doc->loadHTML($html)) {
1230
+                $xpath = new DOMXPath($doc);
1231 1231
 
1232
-				$entries = $xpath->query('(//img[@src])|(//video/source[@src])|(//audio/source[@src])');
1232
+                $entries = $xpath->query('(//img[@src])|(//video/source[@src])|(//audio/source[@src])');
1233 1233
 
1234
-				foreach ($entries as $entry) {
1235
-					if ($entry->hasAttribute('src') && strpos($entry->getAttribute('src'), "data:") !== 0) {
1236
-						$src = rewrite_relative_url($site_url, $entry->getAttribute('src'));
1234
+                foreach ($entries as $entry) {
1235
+                    if ($entry->hasAttribute('src') && strpos($entry->getAttribute('src'), "data:") !== 0) {
1236
+                        $src = rewrite_relative_url($site_url, $entry->getAttribute('src'));
1237 1237
 
1238
-						$local_filename = sha1($src);
1238
+                        $local_filename = sha1($src);
1239 1239
 
1240
-						Debug::log("cache_media: checking $src", Debug::$LOG_VERBOSE);
1240
+                        Debug::log("cache_media: checking $src", Debug::$LOG_VERBOSE);
1241 1241
 
1242
-						if (!$cache->exists($local_filename)) {
1243
-							Debug::log("cache_media: downloading: $src to $local_filename", Debug::$LOG_VERBOSE);
1242
+                        if (!$cache->exists($local_filename)) {
1243
+                            Debug::log("cache_media: downloading: $src to $local_filename", Debug::$LOG_VERBOSE);
1244 1244
 
1245
-							global $fetch_last_error_code;
1246
-							global $fetch_last_error;
1245
+                            global $fetch_last_error_code;
1246
+                            global $fetch_last_error;
1247 1247
 
1248
-							$file_content = fetch_file_contents(array("url" => $src,
1249
-								"http_referrer" => $src,
1250
-								"max_size" => MAX_CACHE_FILE_SIZE));
1248
+                            $file_content = fetch_file_contents(array("url" => $src,
1249
+                                "http_referrer" => $src,
1250
+                                "max_size" => MAX_CACHE_FILE_SIZE));
1251 1251
 
1252
-							if ($file_content) {
1253
-								$cache->put($local_filename, $file_content);
1254
-							} else {
1255
-								Debug::log("cache_media: failed with $fetch_last_error_code: $fetch_last_error");
1256
-							}
1257
-						} else if ($cache->isWritable($local_filename)) {
1258
-							$cache->touch($local_filename);
1259
-						}
1260
-					}
1261
-				}
1262
-			}
1263
-		}
1264
-	}
1252
+                            if ($file_content) {
1253
+                                $cache->put($local_filename, $file_content);
1254
+                            } else {
1255
+                                Debug::log("cache_media: failed with $fetch_last_error_code: $fetch_last_error");
1256
+                            }
1257
+                        } else if ($cache->isWritable($local_filename)) {
1258
+                            $cache->touch($local_filename);
1259
+                        }
1260
+                    }
1261
+                }
1262
+            }
1263
+        }
1264
+    }
1265 1265
 
1266
-	public static function expire_error_log() {
1267
-		Debug::log("Removing old error log entries...");
1266
+    public static function expire_error_log() {
1267
+        Debug::log("Removing old error log entries...");
1268 1268
 
1269
-		$pdo = Db::pdo();
1269
+        $pdo = Db::pdo();
1270 1270
 
1271
-		if (DB_TYPE == "pgsql") {
1272
-			$pdo->query("DELETE FROM ttrss_error_log
1271
+        if (DB_TYPE == "pgsql") {
1272
+            $pdo->query("DELETE FROM ttrss_error_log
1273 1273
 				WHERE created_at < NOW() - INTERVAL '7 days'");
1274
-		} else {
1275
-			$pdo->query("DELETE FROM ttrss_error_log
1274
+        } else {
1275
+            $pdo->query("DELETE FROM ttrss_error_log
1276 1276
 				WHERE created_at < DATE_SUB(NOW(), INTERVAL 7 DAY)");
1277
-		}
1278
-	}
1277
+        }
1278
+    }
1279 1279
 
1280
-	public static function expire_feed_archive() {
1281
-		Debug::log("Removing old archived feeds...");
1280
+    public static function expire_feed_archive() {
1281
+        Debug::log("Removing old archived feeds...");
1282 1282
 
1283
-		$pdo = Db::pdo();
1283
+        $pdo = Db::pdo();
1284 1284
 
1285
-		if (DB_TYPE == "pgsql") {
1286
-			$pdo->query("DELETE FROM ttrss_archived_feeds
1285
+        if (DB_TYPE == "pgsql") {
1286
+            $pdo->query("DELETE FROM ttrss_archived_feeds
1287 1287
 				WHERE created < NOW() - INTERVAL '1 month'");
1288
-		} else {
1289
-			$pdo->query("DELETE FROM ttrss_archived_feeds
1288
+        } else {
1289
+            $pdo->query("DELETE FROM ttrss_archived_feeds
1290 1290
 				WHERE created < DATE_SUB(NOW(), INTERVAL 1 MONTH)");
1291
-		}
1292
-	}
1293
-
1294
-	public static function expire_lock_files() {
1295
-		Debug::log("Removing old lock files...", Debug::$LOG_VERBOSE);
1296
-
1297
-		$num_deleted = 0;
1298
-
1299
-		if (is_writable(LOCK_DIRECTORY)) {
1300
-			$files = glob(LOCK_DIRECTORY . "/*.lock");
1301
-
1302
-			if ($files) {
1303
-				foreach ($files as $file) {
1304
-					if (!file_is_locked(basename($file)) && time() - filemtime($file) > 86400*2) {
1305
-						unlink($file);
1306
-						++$num_deleted;
1307
-					}
1308
-				}
1309
-			}
1310
-		}
1311
-
1312
-		Debug::log("removed $num_deleted old lock files.");
1313
-	}
1314
-
1315
-	/**
1316
-	 * Source: http://www.php.net/manual/en/function.parse-url.php#104527
1317
-	 * Returns the url query as associative array
1318
-	 *
1319
-	 * @param    string    query
1320
-	 * @return    array    params
1321
-	 */
1322
-	public static function convertUrlQuery($query) {
1323
-		$queryParts = explode('&', $query);
1324
-
1325
-		$params = array();
1326
-
1327
-		foreach ($queryParts as $param) {
1328
-			$item = explode('=', $param);
1329
-			$params[$item[0]] = $item[1];
1330
-		}
1331
-
1332
-		return $params;
1333
-	}
1334
-
1335
-	public static function get_article_filters($filters, $title, $content, $link, $author, $tags, &$matched_rules = false, &$matched_filters = false) {
1336
-		$matches = array();
1337
-
1338
-		foreach ($filters as $filter) {
1339
-			$match_any_rule = $filter["match_any_rule"];
1340
-			$inverse = $filter["inverse"];
1341
-			$filter_match = false;
1342
-
1343
-			foreach ($filter["rules"] as $rule) {
1344
-				$match = false;
1345
-				$reg_exp = str_replace('/', '\/', $rule["reg_exp"]);
1346
-				$rule_inverse = $rule["inverse"];
1347
-
1348
-				if (!$reg_exp)
1349
-					continue;
1350
-
1351
-				switch ($rule["type"]) {
1352
-					case "title":
1353
-						$match = @preg_match("/$reg_exp/iu", $title);
1354
-						break;
1355
-					case "content":
1356
-						// we don't need to deal with multiline regexps
1357
-						$content = preg_replace("/[\r\n\t]/", "", $content);
1358
-
1359
-						$match = @preg_match("/$reg_exp/iu", $content);
1360
-						break;
1361
-					case "both":
1362
-						// we don't need to deal with multiline regexps
1363
-						$content = preg_replace("/[\r\n\t]/", "", $content);
1364
-
1365
-						$match = (@preg_match("/$reg_exp/iu", $title) || @preg_match("/$reg_exp/iu", $content));
1366
-						break;
1367
-					case "link":
1368
-						$match = @preg_match("/$reg_exp/iu", $link);
1369
-						break;
1370
-					case "author":
1371
-						$match = @preg_match("/$reg_exp/iu", $author);
1372
-						break;
1373
-					case "tag":
1374
-						foreach ($tags as $tag) {
1375
-							if (@preg_match("/$reg_exp/iu", $tag)) {
1376
-								$match = true;
1377
-								break;
1378
-							}
1379
-						}
1380
-						break;
1381
-				}
1382
-
1383
-				if ($rule_inverse) $match = !$match;
1384
-
1385
-				if ($match_any_rule) {
1386
-					if ($match) {
1387
-						$filter_match = true;
1388
-						break;
1389
-					}
1390
-				} else {
1391
-					$filter_match = $match;
1392
-					if (!$match) {
1393
-						break;
1394
-					}
1395
-				}
1396
-			}
1397
-
1398
-			if ($inverse) $filter_match = !$filter_match;
1399
-
1400
-			if ($filter_match) {
1401
-				if (is_array($matched_rules)) array_push($matched_rules, $rule);
1402
-				if (is_array($matched_filters)) array_push($matched_filters, $filter);
1403
-
1404
-				foreach ($filter["actions"] as $action) {
1405
-					array_push($matches, $action);
1406
-
1407
-					// if Stop action encountered, perform no further processing
1408
-					if (isset($action["type"]) && $action["type"] == "stop") return $matches;
1409
-				}
1410
-			}
1411
-		}
1412
-
1413
-		return $matches;
1414
-	}
1415
-
1416
-	public static function find_article_filter($filters, $filter_name) {
1417
-		foreach ($filters as $f) {
1418
-			if ($f["type"] == $filter_name) {
1419
-				return $f;
1420
-			};
1421
-		}
1422
-		return false;
1423
-	}
1424
-
1425
-	public static function find_article_filters($filters, $filter_name) {
1426
-		$results = array();
1427
-
1428
-		foreach ($filters as $f) {
1429
-			if ($f["type"] == $filter_name) {
1430
-				array_push($results, $f);
1431
-			};
1432
-		}
1433
-		return $results;
1434
-	}
1435
-
1436
-	public static function calculate_article_score($filters) {
1437
-		$score = 0;
1438
-
1439
-		foreach ($filters as $f) {
1440
-			if ($f["type"] == "score") {
1441
-				$score += $f["param"];
1442
-			};
1443
-		}
1444
-		return $score;
1445
-	}
1446
-
1447
-	public static function labels_contains_caption($labels, $caption) {
1448
-		foreach ($labels as $label) {
1449
-			if ($label[1] == $caption) {
1450
-				return true;
1451
-			}
1452
-		}
1453
-
1454
-		return false;
1455
-	}
1456
-
1457
-	public static function assign_article_to_label_filters($id, $filters, $owner_uid, $article_labels) {
1458
-		foreach ($filters as $f) {
1459
-			if ($f["type"] == "label") {
1460
-				if (!RSSUtils::labels_contains_caption($article_labels, $f["param"])) {
1461
-					Labels::add_article($id, $f["param"], $owner_uid);
1462
-				}
1463
-			}
1464
-		}
1465
-	}
1466
-
1467
-	public static function make_guid_from_title($title) {
1468
-		return preg_replace("/[ \"\',.:;]/", "-",
1469
-			mb_strtolower(strip_tags($title), 'utf-8'));
1470
-	}
1471
-
1472
-	public static function cleanup_counters_cache() {
1473
-		$pdo = Db::pdo();
1474
-
1475
-		$res = $pdo->query("DELETE FROM ttrss_counters_cache
1291
+        }
1292
+    }
1293
+
1294
+    public static function expire_lock_files() {
1295
+        Debug::log("Removing old lock files...", Debug::$LOG_VERBOSE);
1296
+
1297
+        $num_deleted = 0;
1298
+
1299
+        if (is_writable(LOCK_DIRECTORY)) {
1300
+            $files = glob(LOCK_DIRECTORY . "/*.lock");
1301
+
1302
+            if ($files) {
1303
+                foreach ($files as $file) {
1304
+                    if (!file_is_locked(basename($file)) && time() - filemtime($file) > 86400*2) {
1305
+                        unlink($file);
1306
+                        ++$num_deleted;
1307
+                    }
1308
+                }
1309
+            }
1310
+        }
1311
+
1312
+        Debug::log("removed $num_deleted old lock files.");
1313
+    }
1314
+
1315
+    /**
1316
+     * Source: http://www.php.net/manual/en/function.parse-url.php#104527
1317
+     * Returns the url query as associative array
1318
+     *
1319
+     * @param    string    query
1320
+     * @return    array    params
1321
+     */
1322
+    public static function convertUrlQuery($query) {
1323
+        $queryParts = explode('&', $query);
1324
+
1325
+        $params = array();
1326
+
1327
+        foreach ($queryParts as $param) {
1328
+            $item = explode('=', $param);
1329
+            $params[$item[0]] = $item[1];
1330
+        }
1331
+
1332
+        return $params;
1333
+    }
1334
+
1335
+    public static function get_article_filters($filters, $title, $content, $link, $author, $tags, &$matched_rules = false, &$matched_filters = false) {
1336
+        $matches = array();
1337
+
1338
+        foreach ($filters as $filter) {
1339
+            $match_any_rule = $filter["match_any_rule"];
1340
+            $inverse = $filter["inverse"];
1341
+            $filter_match = false;
1342
+
1343
+            foreach ($filter["rules"] as $rule) {
1344
+                $match = false;
1345
+                $reg_exp = str_replace('/', '\/', $rule["reg_exp"]);
1346
+                $rule_inverse = $rule["inverse"];
1347
+
1348
+                if (!$reg_exp)
1349
+                    continue;
1350
+
1351
+                switch ($rule["type"]) {
1352
+                    case "title":
1353
+                        $match = @preg_match("/$reg_exp/iu", $title);
1354
+                        break;
1355
+                    case "content":
1356
+                        // we don't need to deal with multiline regexps
1357
+                        $content = preg_replace("/[\r\n\t]/", "", $content);
1358
+
1359
+                        $match = @preg_match("/$reg_exp/iu", $content);
1360
+                        break;
1361
+                    case "both":
1362
+                        // we don't need to deal with multiline regexps
1363
+                        $content = preg_replace("/[\r\n\t]/", "", $content);
1364
+
1365
+                        $match = (@preg_match("/$reg_exp/iu", $title) || @preg_match("/$reg_exp/iu", $content));
1366
+                        break;
1367
+                    case "link":
1368
+                        $match = @preg_match("/$reg_exp/iu", $link);
1369
+                        break;
1370
+                    case "author":
1371
+                        $match = @preg_match("/$reg_exp/iu", $author);
1372
+                        break;
1373
+                    case "tag":
1374
+                        foreach ($tags as $tag) {
1375
+                            if (@preg_match("/$reg_exp/iu", $tag)) {
1376
+                                $match = true;
1377
+                                break;
1378
+                            }
1379
+                        }
1380
+                        break;
1381
+                }
1382
+
1383
+                if ($rule_inverse) $match = !$match;
1384
+
1385
+                if ($match_any_rule) {
1386
+                    if ($match) {
1387
+                        $filter_match = true;
1388
+                        break;
1389
+                    }
1390
+                } else {
1391
+                    $filter_match = $match;
1392
+                    if (!$match) {
1393
+                        break;
1394
+                    }
1395
+                }
1396
+            }
1397
+
1398
+            if ($inverse) $filter_match = !$filter_match;
1399
+
1400
+            if ($filter_match) {
1401
+                if (is_array($matched_rules)) array_push($matched_rules, $rule);
1402
+                if (is_array($matched_filters)) array_push($matched_filters, $filter);
1403
+
1404
+                foreach ($filter["actions"] as $action) {
1405
+                    array_push($matches, $action);
1406
+
1407
+                    // if Stop action encountered, perform no further processing
1408
+                    if (isset($action["type"]) && $action["type"] == "stop") return $matches;
1409
+                }
1410
+            }
1411
+        }
1412
+
1413
+        return $matches;
1414
+    }
1415
+
1416
+    public static function find_article_filter($filters, $filter_name) {
1417
+        foreach ($filters as $f) {
1418
+            if ($f["type"] == $filter_name) {
1419
+                return $f;
1420
+            };
1421
+        }
1422
+        return false;
1423
+    }
1424
+
1425
+    public static function find_article_filters($filters, $filter_name) {
1426
+        $results = array();
1427
+
1428
+        foreach ($filters as $f) {
1429
+            if ($f["type"] == $filter_name) {
1430
+                array_push($results, $f);
1431
+            };
1432
+        }
1433
+        return $results;
1434
+    }
1435
+
1436
+    public static function calculate_article_score($filters) {
1437
+        $score = 0;
1438
+
1439
+        foreach ($filters as $f) {
1440
+            if ($f["type"] == "score") {
1441
+                $score += $f["param"];
1442
+            };
1443
+        }
1444
+        return $score;
1445
+    }
1446
+
1447
+    public static function labels_contains_caption($labels, $caption) {
1448
+        foreach ($labels as $label) {
1449
+            if ($label[1] == $caption) {
1450
+                return true;
1451
+            }
1452
+        }
1453
+
1454
+        return false;
1455
+    }
1456
+
1457
+    public static function assign_article_to_label_filters($id, $filters, $owner_uid, $article_labels) {
1458
+        foreach ($filters as $f) {
1459
+            if ($f["type"] == "label") {
1460
+                if (!RSSUtils::labels_contains_caption($article_labels, $f["param"])) {
1461
+                    Labels::add_article($id, $f["param"], $owner_uid);
1462
+                }
1463
+            }
1464
+        }
1465
+    }
1466
+
1467
+    public static function make_guid_from_title($title) {
1468
+        return preg_replace("/[ \"\',.:;]/", "-",
1469
+            mb_strtolower(strip_tags($title), 'utf-8'));
1470
+    }
1471
+
1472
+    public static function cleanup_counters_cache() {
1473
+        $pdo = Db::pdo();
1474
+
1475
+        $res = $pdo->query("DELETE FROM ttrss_counters_cache
1476 1476
 			WHERE feed_id > 0 AND
1477 1477
 			(SELECT COUNT(id) FROM ttrss_feeds WHERE
1478 1478
 				id = feed_id AND
1479 1479
 				ttrss_counters_cache.owner_uid = ttrss_feeds.owner_uid) = 0");
1480 1480
 
1481
-		$frows = $res->rowCount();
1481
+        $frows = $res->rowCount();
1482 1482
 
1483
-		$res = $pdo->query("DELETE FROM ttrss_cat_counters_cache
1483
+        $res = $pdo->query("DELETE FROM ttrss_cat_counters_cache
1484 1484
 			WHERE feed_id > 0 AND
1485 1485
 			(SELECT COUNT(id) FROM ttrss_feed_categories WHERE
1486 1486
 				id = feed_id AND
1487 1487
 				ttrss_cat_counters_cache.owner_uid = ttrss_feed_categories.owner_uid) = 0");
1488 1488
 
1489
-		$crows = $res->rowCount();
1490
-
1491
-		Debug::log("removed $frows (feeds) $crows (cats) orphaned counter cache entries.");
1492
-	}
1493
-
1494
-	public static function housekeeping_user($owner_uid) {
1495
-		$tmph = new PluginHost();
1496
-
1497
-		load_user_plugins($owner_uid, $tmph);
1498
-
1499
-		$tmph->run_hooks(PluginHost::HOOK_HOUSE_KEEPING, "hook_house_keeping", "");
1500
-	}
1501
-
1502
-	public static function housekeeping_common() {
1503
-		DiskCache::expire();
1504
-
1505
-		RSSUtils::expire_lock_files();
1506
-		RSSUtils::expire_error_log();
1507
-		RSSUtils::expire_feed_archive();
1508
-		RSSUtils::cleanup_feed_browser();
1509
-
1510
-		Article::purge_orphans();
1511
-		RSSUtils::cleanup_counters_cache();
1512
-
1513
-		PluginHost::getInstance()->run_hooks(PluginHost::HOOK_HOUSE_KEEPING, "hook_house_keeping", "");
1514
-	}
1515
-
1516
-	public static function check_feed_favicon($site_url, $feed) {
1517
-		#		print "FAVICON [$site_url]: $favicon_url\n";
1518
-
1519
-		$icon_file = ICONS_DIR . "/$feed.ico";
1520
-
1521
-		if (!file_exists($icon_file)) {
1522
-			$favicon_url = RSSUtils::get_favicon_url($site_url);
1523
-
1524
-			if ($favicon_url) {
1525
-				// Limiting to "image" type misses those served with text/plain
1526
-				$contents = fetch_file_contents($favicon_url); // , "image");
1527
-
1528
-				if ($contents) {
1529
-					// Crude image type matching.
1530
-					// Patterns gleaned from the file(1) source code.
1531
-					if (preg_match('/^\x00\x00\x01\x00/', $contents)) {
1532
-						// 0       string  \000\000\001\000        MS Windows icon resource
1533
-						//error_log("check_feed_favicon: favicon_url=$favicon_url isa MS Windows icon resource");
1534
-					}
1535
-					elseif (preg_match('/^GIF8/', $contents)) {
1536
-						// 0       string          GIF8            GIF image data
1537
-						//error_log("check_feed_favicon: favicon_url=$favicon_url isa GIF image");
1538
-					}
1539
-					elseif (preg_match('/^\x89PNG\x0d\x0a\x1a\x0a/', $contents)) {
1540
-						// 0       string          \x89PNG\x0d\x0a\x1a\x0a         PNG image data
1541
-						//error_log("check_feed_favicon: favicon_url=$favicon_url isa PNG image");
1542
-					}
1543
-					elseif (preg_match('/^\xff\xd8/', $contents)) {
1544
-						// 0       beshort         0xffd8          JPEG image data
1545
-						//error_log("check_feed_favicon: favicon_url=$favicon_url isa JPG image");
1546
-					}
1547
-					elseif (preg_match('/^BM/', $contents)) {
1548
-						// 0	string		BM	PC bitmap (OS2, Windows BMP files)
1549
-						//error_log("check_feed_favicon, favicon_url=$favicon_url isa BMP image");
1550
-					}
1551
-					else {
1552
-						//error_log("check_feed_favicon: favicon_url=$favicon_url isa UNKNOWN type");
1553
-						$contents = "";
1554
-					}
1555
-				}
1556
-
1557
-				if ($contents) {
1558
-					$fp = @fopen($icon_file, "w");
1559
-
1560
-					if ($fp) {
1561
-						fwrite($fp, $contents);
1562
-						fclose($fp);
1563
-						chmod($icon_file, 0644);
1564
-					}
1565
-				}
1566
-			}
1567
-			return $icon_file;
1568
-		}
1569
-	}
1570
-
1571
-	public static function is_gzipped($feed_data) {
1572
-		return strpos(substr($feed_data, 0, 3),
1573
-				"\x1f" . "\x8b" . "\x08", 0) === 0;
1574
-	}
1575
-
1576
-	public static function load_filters($feed_id, $owner_uid) {
1577
-		$filters = array();
1578
-
1579
-		$feed_id = (int) $feed_id;
1580
-		$cat_id = (int)Feeds::getFeedCategory($feed_id);
1581
-
1582
-		if ($cat_id == 0)
1583
-			$null_cat_qpart = "cat_id IS NULL OR";
1584
-		else
1585
-			$null_cat_qpart = "";
1586
-
1587
-		$pdo = Db::pdo();
1588
-
1589
-		$sth = $pdo->prepare("SELECT * FROM ttrss_filters2 WHERE
1489
+        $crows = $res->rowCount();
1490
+
1491
+        Debug::log("removed $frows (feeds) $crows (cats) orphaned counter cache entries.");
1492
+    }
1493
+
1494
+    public static function housekeeping_user($owner_uid) {
1495
+        $tmph = new PluginHost();
1496
+
1497
+        load_user_plugins($owner_uid, $tmph);
1498
+
1499
+        $tmph->run_hooks(PluginHost::HOOK_HOUSE_KEEPING, "hook_house_keeping", "");
1500
+    }
1501
+
1502
+    public static function housekeeping_common() {
1503
+        DiskCache::expire();
1504
+
1505
+        RSSUtils::expire_lock_files();
1506
+        RSSUtils::expire_error_log();
1507
+        RSSUtils::expire_feed_archive();
1508
+        RSSUtils::cleanup_feed_browser();
1509
+
1510
+        Article::purge_orphans();
1511
+        RSSUtils::cleanup_counters_cache();
1512
+
1513
+        PluginHost::getInstance()->run_hooks(PluginHost::HOOK_HOUSE_KEEPING, "hook_house_keeping", "");
1514
+    }
1515
+
1516
+    public static function check_feed_favicon($site_url, $feed) {
1517
+        #		print "FAVICON [$site_url]: $favicon_url\n";
1518
+
1519
+        $icon_file = ICONS_DIR . "/$feed.ico";
1520
+
1521
+        if (!file_exists($icon_file)) {
1522
+            $favicon_url = RSSUtils::get_favicon_url($site_url);
1523
+
1524
+            if ($favicon_url) {
1525
+                // Limiting to "image" type misses those served with text/plain
1526
+                $contents = fetch_file_contents($favicon_url); // , "image");
1527
+
1528
+                if ($contents) {
1529
+                    // Crude image type matching.
1530
+                    // Patterns gleaned from the file(1) source code.
1531
+                    if (preg_match('/^\x00\x00\x01\x00/', $contents)) {
1532
+                        // 0       string  \000\000\001\000        MS Windows icon resource
1533
+                        //error_log("check_feed_favicon: favicon_url=$favicon_url isa MS Windows icon resource");
1534
+                    }
1535
+                    elseif (preg_match('/^GIF8/', $contents)) {
1536
+                        // 0       string          GIF8            GIF image data
1537
+                        //error_log("check_feed_favicon: favicon_url=$favicon_url isa GIF image");
1538
+                    }
1539
+                    elseif (preg_match('/^\x89PNG\x0d\x0a\x1a\x0a/', $contents)) {
1540
+                        // 0       string          \x89PNG\x0d\x0a\x1a\x0a         PNG image data
1541
+                        //error_log("check_feed_favicon: favicon_url=$favicon_url isa PNG image");
1542
+                    }
1543
+                    elseif (preg_match('/^\xff\xd8/', $contents)) {
1544
+                        // 0       beshort         0xffd8          JPEG image data
1545
+                        //error_log("check_feed_favicon: favicon_url=$favicon_url isa JPG image");
1546
+                    }
1547
+                    elseif (preg_match('/^BM/', $contents)) {
1548
+                        // 0	string		BM	PC bitmap (OS2, Windows BMP files)
1549
+                        //error_log("check_feed_favicon, favicon_url=$favicon_url isa BMP image");
1550
+                    }
1551
+                    else {
1552
+                        //error_log("check_feed_favicon: favicon_url=$favicon_url isa UNKNOWN type");
1553
+                        $contents = "";
1554
+                    }
1555
+                }
1556
+
1557
+                if ($contents) {
1558
+                    $fp = @fopen($icon_file, "w");
1559
+
1560
+                    if ($fp) {
1561
+                        fwrite($fp, $contents);
1562
+                        fclose($fp);
1563
+                        chmod($icon_file, 0644);
1564
+                    }
1565
+                }
1566
+            }
1567
+            return $icon_file;
1568
+        }
1569
+    }
1570
+
1571
+    public static function is_gzipped($feed_data) {
1572
+        return strpos(substr($feed_data, 0, 3),
1573
+                "\x1f" . "\x8b" . "\x08", 0) === 0;
1574
+    }
1575
+
1576
+    public static function load_filters($feed_id, $owner_uid) {
1577
+        $filters = array();
1578
+
1579
+        $feed_id = (int) $feed_id;
1580
+        $cat_id = (int)Feeds::getFeedCategory($feed_id);
1581
+
1582
+        if ($cat_id == 0)
1583
+            $null_cat_qpart = "cat_id IS NULL OR";
1584
+        else
1585
+            $null_cat_qpart = "";
1586
+
1587
+        $pdo = Db::pdo();
1588
+
1589
+        $sth = $pdo->prepare("SELECT * FROM ttrss_filters2 WHERE
1590 1590
 				owner_uid = ? AND enabled = true ORDER BY order_id, title");
1591
-		$sth->execute([$owner_uid]);
1591
+        $sth->execute([$owner_uid]);
1592 1592
 
1593
-		$check_cats = array_merge(
1594
-			Feeds::getParentCategories($cat_id, $owner_uid),
1595
-			[$cat_id]);
1593
+        $check_cats = array_merge(
1594
+            Feeds::getParentCategories($cat_id, $owner_uid),
1595
+            [$cat_id]);
1596 1596
 
1597
-		$check_cats_str = join(",", $check_cats);
1598
-		$check_cats_fullids = array_map(function($a) { return "CAT:$a"; }, $check_cats);
1597
+        $check_cats_str = join(",", $check_cats);
1598
+        $check_cats_fullids = array_map(function($a) { return "CAT:$a"; }, $check_cats);
1599 1599
 
1600
-		while ($line = $sth->fetch()) {
1601
-			$filter_id = $line["id"];
1600
+        while ($line = $sth->fetch()) {
1601
+            $filter_id = $line["id"];
1602 1602
 
1603
-			$match_any_rule = sql_bool_to_bool($line["match_any_rule"]);
1603
+            $match_any_rule = sql_bool_to_bool($line["match_any_rule"]);
1604 1604
 
1605
-			$sth2 = $pdo->prepare("SELECT
1605
+            $sth2 = $pdo->prepare("SELECT
1606 1606
 					r.reg_exp, r.inverse, r.feed_id, r.cat_id, r.cat_filter, r.match_on, t.name AS type_name
1607 1607
 					FROM ttrss_filters2_rules AS r,
1608 1608
 					ttrss_filter_types AS t
@@ -1611,117 +1611,117 @@  discard block
 block discarded – undo
1611 1611
 						  (($null_cat_qpart (cat_id IS NULL AND cat_filter = false) OR cat_id IN ($check_cats_str)) AND
1612 1612
 						  (feed_id IS NULL OR feed_id = ?))) AND
1613 1613
 						filter_type = t.id AND filter_id = ?");
1614
-			$sth2->execute([$feed_id, $filter_id]);
1614
+            $sth2->execute([$feed_id, $filter_id]);
1615 1615
 
1616
-			$rules = array();
1617
-			$actions = array();
1616
+            $rules = array();
1617
+            $actions = array();
1618 1618
 
1619
-			while ($rule_line = $sth2->fetch()) {
1620
-				#				print_r($rule_line);
1619
+            while ($rule_line = $sth2->fetch()) {
1620
+                #				print_r($rule_line);
1621 1621
 
1622
-				if ($rule_line["match_on"]) {
1623
-					$match_on = json_decode($rule_line["match_on"], true);
1622
+                if ($rule_line["match_on"]) {
1623
+                    $match_on = json_decode($rule_line["match_on"], true);
1624 1624
 
1625
-					if (in_array("0", $match_on) || in_array($feed_id, $match_on) || count(array_intersect($check_cats_fullids, $match_on)) > 0) {
1625
+                    if (in_array("0", $match_on) || in_array($feed_id, $match_on) || count(array_intersect($check_cats_fullids, $match_on)) > 0) {
1626 1626
 
1627
-						$rule = array();
1628
-						$rule["reg_exp"] = $rule_line["reg_exp"];
1629
-						$rule["type"] = $rule_line["type_name"];
1630
-						$rule["inverse"] = sql_bool_to_bool($rule_line["inverse"]);
1627
+                        $rule = array();
1628
+                        $rule["reg_exp"] = $rule_line["reg_exp"];
1629
+                        $rule["type"] = $rule_line["type_name"];
1630
+                        $rule["inverse"] = sql_bool_to_bool($rule_line["inverse"]);
1631 1631
 
1632
-						array_push($rules, $rule);
1633
-					} else if (!$match_any_rule) {
1634
-						// this filter contains a rule that doesn't match to this feed/category combination
1635
-						// thus filter has to be rejected
1632
+                        array_push($rules, $rule);
1633
+                    } else if (!$match_any_rule) {
1634
+                        // this filter contains a rule that doesn't match to this feed/category combination
1635
+                        // thus filter has to be rejected
1636 1636
 
1637
-						$rules = [];
1638
-						break;
1639
-					}
1637
+                        $rules = [];
1638
+                        break;
1639
+                    }
1640 1640
 
1641
-				} else {
1641
+                } else {
1642 1642
 
1643
-					$rule = array();
1644
-					$rule["reg_exp"] = $rule_line["reg_exp"];
1645
-					$rule["type"] = $rule_line["type_name"];
1646
-					$rule["inverse"] = sql_bool_to_bool($rule_line["inverse"]);
1643
+                    $rule = array();
1644
+                    $rule["reg_exp"] = $rule_line["reg_exp"];
1645
+                    $rule["type"] = $rule_line["type_name"];
1646
+                    $rule["inverse"] = sql_bool_to_bool($rule_line["inverse"]);
1647 1647
 
1648
-					array_push($rules, $rule);
1649
-				}
1650
-			}
1648
+                    array_push($rules, $rule);
1649
+                }
1650
+            }
1651 1651
 
1652
-			if (count($rules) > 0) {
1653
-				$sth2 = $pdo->prepare("SELECT a.action_param,t.name AS type_name
1652
+            if (count($rules) > 0) {
1653
+                $sth2 = $pdo->prepare("SELECT a.action_param,t.name AS type_name
1654 1654
 						FROM ttrss_filters2_actions AS a,
1655 1655
 						ttrss_filter_actions AS t
1656 1656
 						WHERE
1657 1657
 							action_id = t.id AND filter_id = ?");
1658
-				$sth2->execute([$filter_id]);
1659
-
1660
-				while ($action_line = $sth2->fetch()) {
1661
-					#				print_r($action_line);
1662
-
1663
-					$action = array();
1664
-					$action["type"] = $action_line["type_name"];
1665
-					$action["param"] = $action_line["action_param"];
1666
-
1667
-					array_push($actions, $action);
1668
-				}
1669
-			}
1670
-
1671
-			$filter = [];
1672
-			$filter["id"] = $filter_id;
1673
-			$filter["match_any_rule"] = sql_bool_to_bool($line["match_any_rule"]);
1674
-			$filter["inverse"] = sql_bool_to_bool($line["inverse"]);
1675
-			$filter["rules"] = $rules;
1676
-			$filter["actions"] = $actions;
1677
-
1678
-			if (count($rules) > 0 && count($actions) > 0) {
1679
-				array_push($filters, $filter);
1680
-			}
1681
-		}
1682
-
1683
-		return $filters;
1684
-	}
1685
-
1686
-	/**
1687
-	 * Try to determine the favicon URL for a feed.
1688
-	 * adapted from wordpress favicon plugin by Jeff Minard (http://thecodepro.com/)
1689
-	 * http://dev.wp-plugins.org/file/favatars/trunk/favatars.php
1690
-	 *
1691
-	 * @param string $url A feed or page URL
1692
-	 * @access public
1693
-	 * @return mixed The favicon URL, or false if none was found.
1694
-	 */
1695
-	public static function get_favicon_url($url) {
1696
-
1697
-		$favicon_url = false;
1698
-
1699
-		if ($html = @fetch_file_contents($url)) {
1700
-
1701
-			$doc = new DOMDocument();
1702
-			if ($doc->loadHTML($html)) {
1703
-				$xpath = new DOMXPath($doc);
1704
-
1705
-				$base = $xpath->query('/html/head/base[@href]');
1706
-				foreach ($base as $b) {
1707
-					$url = rewrite_relative_url($url, $b->getAttribute("href"));
1708
-					break;
1709
-				}
1710
-
1711
-				$entries = $xpath->query('/html/head/link[@rel="shortcut icon" or @rel="icon"]');
1712
-				if (count($entries) > 0) {
1713
-					foreach ($entries as $entry) {
1714
-						$favicon_url = rewrite_relative_url($url, $entry->getAttribute("href"));
1715
-						break;
1716
-					}
1717
-				}
1718
-			}
1719
-		}
1720
-
1721
-		if (!$favicon_url)
1722
-			$favicon_url = rewrite_relative_url($url, "/favicon.ico");
1723
-
1724
-		return $favicon_url;
1725
-	}
1658
+                $sth2->execute([$filter_id]);
1659
+
1660
+                while ($action_line = $sth2->fetch()) {
1661
+                    #				print_r($action_line);
1662
+
1663
+                    $action = array();
1664
+                    $action["type"] = $action_line["type_name"];
1665
+                    $action["param"] = $action_line["action_param"];
1666
+
1667
+                    array_push($actions, $action);
1668
+                }
1669
+            }
1670
+
1671
+            $filter = [];
1672
+            $filter["id"] = $filter_id;
1673
+            $filter["match_any_rule"] = sql_bool_to_bool($line["match_any_rule"]);
1674
+            $filter["inverse"] = sql_bool_to_bool($line["inverse"]);
1675
+            $filter["rules"] = $rules;
1676
+            $filter["actions"] = $actions;
1677
+
1678
+            if (count($rules) > 0 && count($actions) > 0) {
1679
+                array_push($filters, $filter);
1680
+            }
1681
+        }
1682
+
1683
+        return $filters;
1684
+    }
1685
+
1686
+    /**
1687
+     * Try to determine the favicon URL for a feed.
1688
+     * adapted from wordpress favicon plugin by Jeff Minard (http://thecodepro.com/)
1689
+     * http://dev.wp-plugins.org/file/favatars/trunk/favatars.php
1690
+     *
1691
+     * @param string $url A feed or page URL
1692
+     * @access public
1693
+     * @return mixed The favicon URL, or false if none was found.
1694
+     */
1695
+    public static function get_favicon_url($url) {
1696
+
1697
+        $favicon_url = false;
1698
+
1699
+        if ($html = @fetch_file_contents($url)) {
1700
+
1701
+            $doc = new DOMDocument();
1702
+            if ($doc->loadHTML($html)) {
1703
+                $xpath = new DOMXPath($doc);
1704
+
1705
+                $base = $xpath->query('/html/head/base[@href]');
1706
+                foreach ($base as $b) {
1707
+                    $url = rewrite_relative_url($url, $b->getAttribute("href"));
1708
+                    break;
1709
+                }
1710
+
1711
+                $entries = $xpath->query('/html/head/link[@rel="shortcut icon" or @rel="icon"]');
1712
+                if (count($entries) > 0) {
1713
+                    foreach ($entries as $entry) {
1714
+                        $favicon_url = rewrite_relative_url($url, $entry->getAttribute("href"));
1715
+                        break;
1716
+                    }
1717
+                }
1718
+            }
1719
+        }
1720
+
1721
+        if (!$favicon_url)
1722
+            $favicon_url = rewrite_relative_url($url, "/favicon.ico");
1723
+
1724
+        return $favicon_url;
1725
+    }
1726 1726
 
1727 1727
 }
Please login to merge, or discard this patch.
Spacing   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -7,11 +7,11 @@  discard block
 block discarded – undo
7 7
 			if ($k != "feed" && isset($v)) {
8 8
 				$x = strip_tags(is_array($v) ? implode(",", $v) : $v);
9 9
 
10
-				$tmp .= sha1("$k:" . sha1($x));
10
+				$tmp .= sha1("$k:".sha1($x));
11 11
 			}
12 12
 		}
13 13
 
14
-		return sha1(implode(",", $pluginhost->get_plugin_names()) . $tmp);
14
+		return sha1(implode(",", $pluginhost->get_plugin_names()).$tmp);
15 15
 	}
16 16
 
17 17
 	// Strips utf8mb4 characters (i.e. emoji) for mysql
@@ -137,7 +137,7 @@  discard block
 block discarded – undo
137 137
 			//update_rss_feed($line["id"], true);
138 138
 
139 139
 			if ($tline = $usth->fetch()) {
140
-				Debug::log(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]);
140
+				Debug::log(" => ".$tline["last_updated"].", ".$tline["id"]." ".$tline["owner_uid"]);
141 141
 
142 142
 				if (array_search($tline["owner_uid"], $batch_owners) === false)
143 143
 					array_push($batch_owners, $tline["owner_uid"]);
@@ -323,7 +323,7 @@  discard block
 block discarded – undo
323 323
 
324 324
 		$date_feed_processed = date('Y-m-d H:i');
325 325
 
326
-		$cache_filename = CACHE_DIR . "/feeds/" . sha1($fetch_url) . ".xml";
326
+		$cache_filename = CACHE_DIR."/feeds/".sha1($fetch_url).".xml";
327 327
 
328 328
 		$pluginhost = new PluginHost();
329 329
 		$user_plugins = get_pref("_ENABLED_PLUGINS", $owner_uid);
@@ -340,7 +340,7 @@  discard block
 block discarded – undo
340 340
 		Debug::log("running HOOK_FETCH_FEED handlers...", Debug::$LOG_VERBOSE);
341 341
 
342 342
 		foreach ($pluginhost->get_hooks(PluginHost::HOOK_FETCH_FEED) as $plugin) {
343
-			Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
343
+			Debug::log("... ".get_class($plugin), Debug::$LOG_VERBOSE);
344 344
 			$start = microtime(true);
345 345
 			$feed_data = $plugin->hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed, 0, $auth_login, $auth_pass);
346 346
 			Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
@@ -402,7 +402,7 @@  discard block
 block discarded – undo
402 402
 			$feed_data = trim($feed_data);
403 403
 
404 404
 			Debug::log("fetch done.", Debug::$LOG_VERBOSE);
405
-			Debug::log("source last modified: " . $fetch_last_modified, Debug::$LOG_VERBOSE);
405
+			Debug::log("source last modified: ".$fetch_last_modified, Debug::$LOG_VERBOSE);
406 406
 
407 407
 			if ($feed_data && $fetch_last_modified != $stored_last_modified) {
408 408
 				$sth = $pdo->prepare("UPDATE ttrss_feeds SET last_modified = ? WHERE id = ?");
@@ -410,7 +410,7 @@  discard block
 block discarded – undo
410 410
 			}
411 411
 
412 412
 			// cache vanilla feed data for re-use
413
-			if ($feed_data && !$auth_pass && !$auth_login && is_writable(CACHE_DIR . "/feeds")) {
413
+			if ($feed_data && !$auth_pass && !$auth_login && is_writable(CACHE_DIR."/feeds")) {
414 414
 				$new_rss_hash = sha1($feed_data);
415 415
 
416 416
 				if ($new_rss_hash != $rss_hash) {
@@ -445,7 +445,7 @@  discard block
 block discarded – undo
445 445
 		$feed_data_checksum = md5($feed_data);
446 446
 
447 447
 		foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_FETCHED) as $plugin) {
448
-			Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
448
+			Debug::log("... ".get_class($plugin), Debug::$LOG_VERBOSE);
449 449
 			$start = microtime(true);
450 450
 			$feed_data = $plugin->hook_feed_fetched($feed_data, $fetch_url, $owner_uid, $feed);
451 451
 			Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
@@ -467,7 +467,7 @@  discard block
 block discarded – undo
467 467
 			// We use local pluginhost here because we need to load different per-user feed plugins
468 468
 
469 469
 			foreach ($pluginhost->get_hooks(PluginHost::HOOK_FEED_PARSED) as $plugin) {
470
-				Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
470
+				Debug::log("... ".get_class($plugin), Debug::$LOG_VERBOSE);
471 471
 				$start = microtime(true);
472 472
 				$plugin->hook_feed_parsed($rss);
473 473
 				Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
@@ -499,14 +499,14 @@  discard block
 block discarded – undo
499 499
 			$site_url = mb_substr(rewrite_relative_url($fetch_url, clean($rss->get_link())), 0, 245);
500 500
 
501 501
 			Debug::log("site_url: $site_url", Debug::$LOG_VERBOSE);
502
-			Debug::log("feed_title: " . clean($rss->get_title()), Debug::$LOG_VERBOSE);
502
+			Debug::log("feed_title: ".clean($rss->get_title()), Debug::$LOG_VERBOSE);
503 503
 
504 504
 			if ($favicon_needs_check || $force_refetch) {
505 505
 
506 506
 				/* terrible hack: if we crash on floicon shit here, we won't check
507 507
 				 * the icon avgcolor again (unless the icon got updated) */
508 508
 
509
-				$favicon_file = ICONS_DIR . "/$feed.ico";
509
+				$favicon_file = ICONS_DIR."/$feed.ico";
510 510
 				$favicon_modified = @filemtime($favicon_file);
511 511
 
512 512
 				Debug::log("checking favicon...", Debug::$LOG_VERBOSE);
@@ -527,7 +527,7 @@  discard block
 block discarded – undo
527 527
 
528 528
 					$favicon_color = calculate_avg_color($favicon_file);
529 529
 
530
-					$favicon_colorstring = ",favicon_avg_color = " . $pdo->quote($favicon_color);
530
+					$favicon_colorstring = ",favicon_avg_color = ".$pdo->quote($favicon_color);
531 531
 
532 532
 				} else if ($favicon_avg_color == 'fail') {
533 533
 					Debug::log("floicon failed on this file, not trying to recalculate avg color", Debug::$LOG_VERBOSE);
@@ -546,7 +546,7 @@  discard block
 block discarded – undo
546 546
 				print_r($filters);
547 547
 			}
548 548
 
549
-			Debug::log("" . count($filters) . " filters loaded.", Debug::$LOG_VERBOSE);
549
+			Debug::log("".count($filters)." filters loaded.", Debug::$LOG_VERBOSE);
550 550
 
551 551
 			$items = $rss->get_items();
552 552
 
@@ -588,13 +588,13 @@  discard block
 block discarded – undo
588 588
 
589 589
 				$entry_guid = "$owner_uid,$entry_guid";
590 590
 
591
-				$entry_guid_hashed = 'SHA1:' . sha1($entry_guid);
591
+				$entry_guid_hashed = 'SHA1:'.sha1($entry_guid);
592 592
 
593 593
 				Debug::log("guid $entry_guid / $entry_guid_hashed", Debug::$LOG_VERBOSE);
594 594
 
595
-				$entry_timestamp = (int)$item->get_date();
595
+				$entry_timestamp = (int) $item->get_date();
596 596
 
597
-				Debug::log("orig date: " . $item->get_date(), Debug::$LOG_VERBOSE);
597
+				Debug::log("orig date: ".$item->get_date(), Debug::$LOG_VERBOSE);
598 598
 
599 599
 				$entry_title = strip_tags($item->get_title());
600 600
 
@@ -606,7 +606,7 @@  discard block
 block discarded – undo
606 606
 				Debug::log("link $entry_link", Debug::$LOG_VERBOSE);
607 607
 				Debug::log("language $entry_language", Debug::$LOG_VERBOSE);
608 608
 
609
-				if (!$entry_title) $entry_title = date("Y-m-d H:i:s", $entry_timestamp);;
609
+				if (!$entry_title) $entry_title = date("Y-m-d H:i:s", $entry_timestamp); ;
610 610
 
611 611
 				$entry_content = $item->get_content();
612 612
 				if (!$entry_content) $entry_content = $item->get_description();
@@ -627,7 +627,7 @@  discard block
 block discarded – undo
627 627
 				Debug::log("looking for tags...", Debug::$LOG_VERBOSE);
628 628
 
629 629
 				$entry_tags = $item->get_categories();
630
-				Debug::log("tags found: " . join(", ", $entry_tags), Debug::$LOG_VERBOSE);
630
+				Debug::log("tags found: ".join(", ", $entry_tags), Debug::$LOG_VERBOSE);
631 631
 
632 632
 				Debug::log("done collecting data.", Debug::$LOG_VERBOSE);
633 633
 
@@ -692,14 +692,14 @@  discard block
 block discarded – undo
692 692
 				Debug::log("hash differs, applying plugin filters:", Debug::$LOG_VERBOSE);
693 693
 
694 694
 				foreach ($pluginhost->get_hooks(PluginHost::HOOK_ARTICLE_FILTER) as $plugin) {
695
-					Debug::log("... " . get_class($plugin), Debug::$LOG_VERBOSE);
695
+					Debug::log("... ".get_class($plugin), Debug::$LOG_VERBOSE);
696 696
 
697 697
 					$start = microtime(true);
698 698
 					$article = $plugin->hook_article_filter($article);
699 699
 
700 700
 					Debug::log(sprintf("=== %.4f (sec)", microtime(true) - $start), Debug::$LOG_VERBOSE);
701 701
 
702
-					$entry_plugin_data .= mb_strtolower(get_class($plugin)) . ",";
702
+					$entry_plugin_data .= mb_strtolower(get_class($plugin)).",";
703 703
 				}
704 704
 
705 705
                 if (Debug::get_loglevel() >= 3) {
@@ -772,7 +772,7 @@  discard block
 block discarded – undo
772 772
 					Debug::log("applying plugin filter actions...", Debug::$LOG_VERBOSE);
773 773
 
774 774
 					foreach ($plugin_filter_names as $pfn) {
775
-						list($pfclass,$pfaction) = explode(":", $pfn["param"]);
775
+						list($pfclass, $pfaction) = explode(":", $pfn["param"]);
776 776
 
777 777
 						if (isset($plugin_filter_actions[$pfclass])) {
778 778
 							$plugin = $pluginhost->get_plugin($pfclass);
@@ -867,7 +867,7 @@  discard block
 block discarded – undo
867 867
 							$entry_current_hash,
868 868
 							$date_feed_processed,
869 869
 							$entry_comments,
870
-							(int)$num_comments,
870
+							(int) $num_comments,
871 871
 							$entry_plugin_data,
872 872
 							"$entry_language",
873 873
 							"$entry_author"]);
@@ -979,7 +979,7 @@  discard block
 block discarded – undo
979 979
 						":content" => "$entry_content",
980 980
 						":content_hash" => $entry_current_hash,
981 981
 						":updated" => $entry_timestamp_fmt,
982
-						":num_comments" => (int)$num_comments,
982
+						":num_comments" => (int) $num_comments,
983 983
 						":plugin_data" => $entry_plugin_data,
984 984
 						":author" => "$entry_author",
985 985
 						":lang" => $entry_language,
@@ -987,7 +987,7 @@  discard block
 block discarded – undo
987 987
 
988 988
 					if (DB_TYPE == "pgsql") {
989 989
 						$params[":ts_lang"] = $feed_language;
990
-						$params[":ts_content"] = mb_substr(strip_tags($entry_title . " " . $entry_content), 0, 900000);
990
+						$params[":ts_content"] = mb_substr(strip_tags($entry_title." ".$entry_content), 0, 900000);
991 991
 					}
992 992
 
993 993
 					$sth->execute($params);
@@ -1067,7 +1067,7 @@  discard block
 block discarded – undo
1067 1067
 				foreach ($enclosures as $enc) {
1068 1068
 					$enc_url = $enc[0];
1069 1069
 					$enc_type = $enc[1];
1070
-					$enc_dur = (int)$enc[2];
1070
+					$enc_dur = (int) $enc[2];
1071 1071
 					$enc_title = $enc[3];
1072 1072
 					$enc_width = intval($enc[4]);
1073 1073
 					$enc_height = intval($enc[5]);
@@ -1075,7 +1075,7 @@  discard block
 block discarded – undo
1075 1075
 					$esth->execute([$enc_url, $enc_type, $entry_ref_id]);
1076 1076
 
1077 1077
 					if (!$esth->fetch()) {
1078
-						$usth->execute([$enc_url, $enc_type, (string)$enc_title, $enc_dur, $entry_ref_id, $enc_width, $enc_height]);
1078
+						$usth->execute([$enc_url, $enc_type, (string) $enc_title, $enc_dur, $entry_ref_id, $enc_width, $enc_height]);
1079 1079
 					}
1080 1080
 				}
1081 1081
 
@@ -1109,7 +1109,7 @@  discard block
 block discarded – undo
1109 1109
 				$filtered_tags = array_unique($filtered_tags);
1110 1110
 
1111 1111
 				if (Debug::get_loglevel() >= Debug::$LOG_VERBOSE) {
1112
-					Debug::log("filtered tags: " . implode(", ", $filtered_tags), Debug::$LOG_VERBOSE);
1112
+					Debug::log("filtered tags: ".implode(", ", $filtered_tags), Debug::$LOG_VERBOSE);
1113 1113
 
1114 1114
 				}
1115 1115
 
@@ -1297,11 +1297,11 @@  discard block
 block discarded – undo
1297 1297
 		$num_deleted = 0;
1298 1298
 
1299 1299
 		if (is_writable(LOCK_DIRECTORY)) {
1300
-			$files = glob(LOCK_DIRECTORY . "/*.lock");
1300
+			$files = glob(LOCK_DIRECTORY."/*.lock");
1301 1301
 
1302 1302
 			if ($files) {
1303 1303
 				foreach ($files as $file) {
1304
-					if (!file_is_locked(basename($file)) && time() - filemtime($file) > 86400*2) {
1304
+					if (!file_is_locked(basename($file)) && time() - filemtime($file) > 86400 * 2) {
1305 1305
 						unlink($file);
1306 1306
 						++$num_deleted;
1307 1307
 					}
@@ -1516,7 +1516,7 @@  discard block
 block discarded – undo
1516 1516
 	public static function check_feed_favicon($site_url, $feed) {
1517 1517
 		#		print "FAVICON [$site_url]: $favicon_url\n";
1518 1518
 
1519
-		$icon_file = ICONS_DIR . "/$feed.ico";
1519
+		$icon_file = ICONS_DIR."/$feed.ico";
1520 1520
 
1521 1521
 		if (!file_exists($icon_file)) {
1522 1522
 			$favicon_url = RSSUtils::get_favicon_url($site_url);
@@ -1570,14 +1570,14 @@  discard block
 block discarded – undo
1570 1570
 
1571 1571
 	public static function is_gzipped($feed_data) {
1572 1572
 		return strpos(substr($feed_data, 0, 3),
1573
-				"\x1f" . "\x8b" . "\x08", 0) === 0;
1573
+				"\x1f"."\x8b"."\x08", 0) === 0;
1574 1574
 	}
1575 1575
 
1576 1576
 	public static function load_filters($feed_id, $owner_uid) {
1577 1577
 		$filters = array();
1578 1578
 
1579 1579
 		$feed_id = (int) $feed_id;
1580
-		$cat_id = (int)Feeds::getFeedCategory($feed_id);
1580
+		$cat_id = (int) Feeds::getFeedCategory($feed_id);
1581 1581
 
1582 1582
 		if ($cat_id == 0)
1583 1583
 			$null_cat_qpart = "cat_id IS NULL OR";
Please login to merge, or discard this patch.
Braces   +73 added lines, -46 removed lines patch added patch discarded remove patch
@@ -80,7 +80,9 @@  discard block
 block discarded – undo
80 80
 
81 81
 		// Update the least recently updated feeds first
82 82
 		$query_order = "ORDER BY last_updated";
83
-		if (DB_TYPE == "pgsql") $query_order .= " NULLS FIRST";
83
+		if (DB_TYPE == "pgsql") {
84
+		    $query_order .= " NULLS FIRST";
85
+		}
84 86
 
85 87
 		$query = "SELECT DISTINCT ttrss_feeds.feed_url, ttrss_feeds.last_updated
86 88
 			FROM
@@ -139,8 +141,9 @@  discard block
 block discarded – undo
139 141
 			if ($tline = $usth->fetch()) {
140 142
 				Debug::log(" => " . $tline["last_updated"] . ", " . $tline["id"] . " " . $tline["owner_uid"]);
141 143
 
142
-				if (array_search($tline["owner_uid"], $batch_owners) === false)
143
-					array_push($batch_owners, $tline["owner_uid"]);
144
+				if (array_search($tline["owner_uid"], $batch_owners) === false) {
145
+									array_push($batch_owners, $tline["owner_uid"]);
146
+				}
144 147
 
145 148
 				$fstarted = microtime(true);
146 149
 
@@ -311,11 +314,13 @@  discard block
 block discarded – undo
311 314
 
312 315
 			$feed_language = mb_strtolower($row["feed_language"]);
313 316
 
314
-			if (!$feed_language)
315
-				$feed_language = mb_strtolower(get_pref('DEFAULT_SEARCH_LANGUAGE', $owner_uid));
317
+			if (!$feed_language) {
318
+							$feed_language = mb_strtolower(get_pref('DEFAULT_SEARCH_LANGUAGE', $owner_uid));
319
+			}
316 320
 
317
-			if (!$feed_language)
318
-				$feed_language = 'simple';
321
+			if (!$feed_language) {
322
+							$feed_language = 'simple';
323
+			}
319 324
 
320 325
 		} else {
321 326
 			return false;
@@ -514,8 +519,9 @@  discard block
 block discarded – undo
514 519
 				RSSUtils::check_feed_favicon($site_url, $feed);
515 520
 				$favicon_modified_new = @filemtime($favicon_file);
516 521
 
517
-				if ($favicon_modified_new > $favicon_modified)
518
-					$favicon_avg_color = '';
522
+				if ($favicon_modified_new > $favicon_modified) {
523
+									$favicon_avg_color = '';
524
+				}
519 525
 
520 526
 				$favicon_colorstring = "";
521 527
 				if (file_exists($favicon_file) && function_exists("imagecreatefromstring") && $favicon_avg_color == '') {
@@ -578,8 +584,12 @@  discard block
 block discarded – undo
578 584
 				}
579 585
 
580 586
 				$entry_guid = strip_tags($item->get_id());
581
-				if (!$entry_guid) $entry_guid = strip_tags($item->get_link());
582
-				if (!$entry_guid) $entry_guid = RSSUtils::make_guid_from_title($item->get_title());
587
+				if (!$entry_guid) {
588
+				    $entry_guid = strip_tags($item->get_link());
589
+				}
590
+				if (!$entry_guid) {
591
+				    $entry_guid = RSSUtils::make_guid_from_title($item->get_title());
592
+				}
583 593
 
584 594
 				if (!$entry_guid) {
585 595
 					$pdo->commit();
@@ -606,10 +616,15 @@  discard block
 block discarded – undo
606 616
 				Debug::log("link $entry_link", Debug::$LOG_VERBOSE);
607 617
 				Debug::log("language $entry_language", Debug::$LOG_VERBOSE);
608 618
 
609
-				if (!$entry_title) $entry_title = date("Y-m-d H:i:s", $entry_timestamp);;
619
+				if (!$entry_title) {
620
+				    $entry_title = date("Y-m-d H:i:s", $entry_timestamp);
621
+				}
622
+				;
610 623
 
611 624
 				$entry_content = $item->get_content();
612
-				if (!$entry_content) $entry_content = $item->get_description();
625
+				if (!$entry_content) {
626
+				    $entry_content = $item->get_description();
627
+				}
613 628
 
614 629
 				if (Debug::get_loglevel() >= 3) {
615 630
 					print "content: ";
@@ -824,8 +839,9 @@  discard block
 block discarded – undo
824 839
 
825 840
 				Debug::log("force catchup: $entry_force_catchup", Debug::$LOG_VERBOSE);
826 841
 
827
-				if ($cache_images)
828
-					RSSUtils::cache_media($entry_content, $site_url);
842
+				if ($cache_images) {
843
+									RSSUtils::cache_media($entry_content, $site_url);
844
+				}
829 845
 
830 846
 				$csth = $pdo->prepare("SELECT id FROM ttrss_entries
831 847
 					WHERE guid = ? OR guid = ?");
@@ -951,16 +967,18 @@  discard block
 block discarded – undo
951 967
 
952 968
 						$sth->execute([$ref_id, $owner_uid, $feed]);
953 969
 
954
-						if ($row = $sth->fetch())
955
-							$entry_int_id = $row['int_id'];
970
+						if ($row = $sth->fetch()) {
971
+													$entry_int_id = $row['int_id'];
972
+						}
956 973
 					}
957 974
 
958 975
 					Debug::log("resulting RID: $entry_ref_id, IID: $entry_int_id", Debug::$LOG_VERBOSE);
959 976
 
960
-					if (DB_TYPE == "pgsql")
961
-						$tsvector_qpart = "tsvector_combined = to_tsvector(:ts_lang, :ts_content),";
962
-					else
963
-						$tsvector_qpart = "";
977
+					if (DB_TYPE == "pgsql") {
978
+											$tsvector_qpart = "tsvector_combined = to_tsvector(:ts_lang, :ts_content),";
979
+					} else {
980
+											$tsvector_qpart = "";
981
+					}
964 982
 
965 983
 					$sth = $pdo->prepare("UPDATE ttrss_entries
966 984
 						SET title = :title,
@@ -1049,8 +1067,9 @@  discard block
 block discarded – undo
1049 1067
 					}
1050 1068
 				}
1051 1069
 
1052
-				if ($cache_images)
1053
-					RSSUtils::cache_enclosures($enclosures, $site_url);
1070
+				if ($cache_images) {
1071
+									RSSUtils::cache_enclosures($enclosures, $site_url);
1072
+				}
1054 1073
 
1055 1074
 				if (Debug::get_loglevel() >= Debug::$LOG_EXTENDED) {
1056 1075
 					Debug::log("article enclosures:", Debug::$LOG_VERBOSE);
@@ -1345,8 +1364,9 @@  discard block
 block discarded – undo
1345 1364
 				$reg_exp = str_replace('/', '\/', $rule["reg_exp"]);
1346 1365
 				$rule_inverse = $rule["inverse"];
1347 1366
 
1348
-				if (!$reg_exp)
1349
-					continue;
1367
+				if (!$reg_exp) {
1368
+									continue;
1369
+				}
1350 1370
 
1351 1371
 				switch ($rule["type"]) {
1352 1372
 					case "title":
@@ -1380,7 +1400,9 @@  discard block
 block discarded – undo
1380 1400
 						break;
1381 1401
 				}
1382 1402
 
1383
-				if ($rule_inverse) $match = !$match;
1403
+				if ($rule_inverse) {
1404
+				    $match = !$match;
1405
+				}
1384 1406
 
1385 1407
 				if ($match_any_rule) {
1386 1408
 					if ($match) {
@@ -1395,17 +1417,25 @@  discard block
 block discarded – undo
1395 1417
 				}
1396 1418
 			}
1397 1419
 
1398
-			if ($inverse) $filter_match = !$filter_match;
1420
+			if ($inverse) {
1421
+			    $filter_match = !$filter_match;
1422
+			}
1399 1423
 
1400 1424
 			if ($filter_match) {
1401
-				if (is_array($matched_rules)) array_push($matched_rules, $rule);
1402
-				if (is_array($matched_filters)) array_push($matched_filters, $filter);
1425
+				if (is_array($matched_rules)) {
1426
+				    array_push($matched_rules, $rule);
1427
+				}
1428
+				if (is_array($matched_filters)) {
1429
+				    array_push($matched_filters, $filter);
1430
+				}
1403 1431
 
1404 1432
 				foreach ($filter["actions"] as $action) {
1405 1433
 					array_push($matches, $action);
1406 1434
 
1407 1435
 					// if Stop action encountered, perform no further processing
1408
-					if (isset($action["type"]) && $action["type"] == "stop") return $matches;
1436
+					if (isset($action["type"]) && $action["type"] == "stop") {
1437
+					    return $matches;
1438
+					}
1409 1439
 				}
1410 1440
 			}
1411 1441
 		}
@@ -1531,24 +1561,19 @@  discard block
 block discarded – undo
1531 1561
 					if (preg_match('/^\x00\x00\x01\x00/', $contents)) {
1532 1562
 						// 0       string  \000\000\001\000        MS Windows icon resource
1533 1563
 						//error_log("check_feed_favicon: favicon_url=$favicon_url isa MS Windows icon resource");
1534
-					}
1535
-					elseif (preg_match('/^GIF8/', $contents)) {
1564
+					} elseif (preg_match('/^GIF8/', $contents)) {
1536 1565
 						// 0       string          GIF8            GIF image data
1537 1566
 						//error_log("check_feed_favicon: favicon_url=$favicon_url isa GIF image");
1538
-					}
1539
-					elseif (preg_match('/^\x89PNG\x0d\x0a\x1a\x0a/', $contents)) {
1567
+					} elseif (preg_match('/^\x89PNG\x0d\x0a\x1a\x0a/', $contents)) {
1540 1568
 						// 0       string          \x89PNG\x0d\x0a\x1a\x0a         PNG image data
1541 1569
 						//error_log("check_feed_favicon: favicon_url=$favicon_url isa PNG image");
1542
-					}
1543
-					elseif (preg_match('/^\xff\xd8/', $contents)) {
1570
+					} elseif (preg_match('/^\xff\xd8/', $contents)) {
1544 1571
 						// 0       beshort         0xffd8          JPEG image data
1545 1572
 						//error_log("check_feed_favicon: favicon_url=$favicon_url isa JPG image");
1546
-					}
1547
-					elseif (preg_match('/^BM/', $contents)) {
1573
+					} elseif (preg_match('/^BM/', $contents)) {
1548 1574
 						// 0	string		BM	PC bitmap (OS2, Windows BMP files)
1549 1575
 						//error_log("check_feed_favicon, favicon_url=$favicon_url isa BMP image");
1550
-					}
1551
-					else {
1576
+					} else {
1552 1577
 						//error_log("check_feed_favicon: favicon_url=$favicon_url isa UNKNOWN type");
1553 1578
 						$contents = "";
1554 1579
 					}
@@ -1579,10 +1604,11 @@  discard block
 block discarded – undo
1579 1604
 		$feed_id = (int) $feed_id;
1580 1605
 		$cat_id = (int)Feeds::getFeedCategory($feed_id);
1581 1606
 
1582
-		if ($cat_id == 0)
1583
-			$null_cat_qpart = "cat_id IS NULL OR";
1584
-		else
1585
-			$null_cat_qpart = "";
1607
+		if ($cat_id == 0) {
1608
+					$null_cat_qpart = "cat_id IS NULL OR";
1609
+		} else {
1610
+					$null_cat_qpart = "";
1611
+		}
1586 1612
 
1587 1613
 		$pdo = Db::pdo();
1588 1614
 
@@ -1718,8 +1744,9 @@  discard block
 block discarded – undo
1718 1744
 			}
1719 1745
 		}
1720 1746
 
1721
-		if (!$favicon_url)
1722
-			$favicon_url = rewrite_relative_url($url, "/favicon.ico");
1747
+		if (!$favicon_url) {
1748
+					$favicon_url = rewrite_relative_url($url, "/favicon.ico");
1749
+		}
1723 1750
 
1724 1751
 		return $favicon_url;
1725 1752
 	}
Please login to merge, or discard this patch.
classes/article.php 2 patches
Indentation   +521 added lines, -521 removed lines patch added patch discarded remove patch
@@ -1,620 +1,620 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 class Article extends Handler_Protected {
3 3
 
4
-	public function csrf_ignore($method) {
5
-		$csrf_ignored = array("redirect", "editarticletags");
4
+    public function csrf_ignore($method) {
5
+        $csrf_ignored = array("redirect", "editarticletags");
6 6
 
7
-		return array_search($method, $csrf_ignored) !== false;
8
-	}
7
+        return array_search($method, $csrf_ignored) !== false;
8
+    }
9 9
 
10
-	public function redirect() {
11
-		$id = clean($_REQUEST['id']);
10
+    public function redirect() {
11
+        $id = clean($_REQUEST['id']);
12 12
 
13
-		$sth = $this->pdo->prepare("SELECT link FROM ttrss_entries, ttrss_user_entries
13
+        $sth = $this->pdo->prepare("SELECT link FROM ttrss_entries, ttrss_user_entries
14 14
 						WHERE id = ? AND id = ref_id AND owner_uid = ?
15 15
 						LIMIT 1");
16 16
         $sth->execute([$id, $_SESSION['uid']]);
17 17
 
18
-		if ($row = $sth->fetch()) {
19
-			$article_url = $row['link'];
20
-			$article_url = str_replace("\n", "", $article_url);
18
+        if ($row = $sth->fetch()) {
19
+            $article_url = $row['link'];
20
+            $article_url = str_replace("\n", "", $article_url);
21 21
 
22
-			header("Location: $article_url");
23
-			return;
22
+            header("Location: $article_url");
23
+            return;
24 24
 
25
-		} else {
26
-			print_error(__("Article not found."));
27
-		}
28
-	}
25
+        } else {
26
+            print_error(__("Article not found."));
27
+        }
28
+    }
29 29
 
30
-	public static function create_published_article($title, $url, $content, $labels_str,
31
-			$owner_uid) {
30
+    public static function create_published_article($title, $url, $content, $labels_str,
31
+            $owner_uid) {
32 32
 
33
-		$guid = 'SHA1:' . sha1("ttshared:" . $url . $owner_uid); // include owner_uid to prevent global GUID clash
33
+        $guid = 'SHA1:' . sha1("ttshared:" . $url . $owner_uid); // include owner_uid to prevent global GUID clash
34 34
 
35
-		if (!$content) {
36
-			$pluginhost = new PluginHost();
37
-			$pluginhost->load_all(PluginHost::KIND_ALL, $owner_uid);
38
-			$pluginhost->load_data();
35
+        if (!$content) {
36
+            $pluginhost = new PluginHost();
37
+            $pluginhost->load_all(PluginHost::KIND_ALL, $owner_uid);
38
+            $pluginhost->load_data();
39 39
 
40
-			foreach ($pluginhost->get_hooks(PluginHost::HOOK_GET_FULL_TEXT) as $p) {
41
-				$extracted_content = $p->hook_get_full_text($url);
40
+            foreach ($pluginhost->get_hooks(PluginHost::HOOK_GET_FULL_TEXT) as $p) {
41
+                $extracted_content = $p->hook_get_full_text($url);
42 42
 
43
-				if ($extracted_content) {
44
-					$content = $extracted_content;
45
-					break;
46
-				}
47
-			}
48
-		}
43
+                if ($extracted_content) {
44
+                    $content = $extracted_content;
45
+                    break;
46
+                }
47
+            }
48
+        }
49 49
 
50
-		$content_hash = sha1($content);
50
+        $content_hash = sha1($content);
51 51
 
52
-		if ($labels_str != "") {
53
-			$labels = explode(",", $labels_str);
54
-		} else {
55
-			$labels = array();
56
-		}
52
+        if ($labels_str != "") {
53
+            $labels = explode(",", $labels_str);
54
+        } else {
55
+            $labels = array();
56
+        }
57 57
 
58
-		$rc = false;
58
+        $rc = false;
59 59
 
60
-		if (!$title) $title = $url;
61
-		if (!$title && !$url) return false;
60
+        if (!$title) $title = $url;
61
+        if (!$title && !$url) return false;
62 62
 
63
-		if (filter_var($url, FILTER_VALIDATE_URL) === false) return false;
63
+        if (filter_var($url, FILTER_VALIDATE_URL) === false) return false;
64 64
 
65
-		$pdo = Db::pdo();
65
+        $pdo = Db::pdo();
66 66
 
67
-		$pdo->beginTransaction();
67
+        $pdo->beginTransaction();
68 68
 
69
-		// only check for our user data here, others might have shared this with different content etc
70
-		$sth = $pdo->prepare("SELECT id FROM ttrss_entries, ttrss_user_entries WHERE
69
+        // only check for our user data here, others might have shared this with different content etc
70
+        $sth = $pdo->prepare("SELECT id FROM ttrss_entries, ttrss_user_entries WHERE
71 71
 			guid = ? AND ref_id = id AND owner_uid = ? LIMIT 1");
72
-		$sth->execute([$guid, $owner_uid]);
72
+        $sth->execute([$guid, $owner_uid]);
73 73
 
74
-		if ($row = $sth->fetch()) {
75
-			$ref_id = $row['id'];
74
+        if ($row = $sth->fetch()) {
75
+            $ref_id = $row['id'];
76 76
 
77
-			$sth = $pdo->prepare("SELECT int_id FROM ttrss_user_entries WHERE
77
+            $sth = $pdo->prepare("SELECT int_id FROM ttrss_user_entries WHERE
78 78
 				ref_id = ? AND owner_uid = ? LIMIT 1");
79 79
             $sth->execute([$ref_id, $owner_uid]);
80 80
 
81
-			if ($row = $sth->fetch()) {
82
-				$int_id = $row['int_id'];
81
+            if ($row = $sth->fetch()) {
82
+                $int_id = $row['int_id'];
83 83
 
84
-				$sth = $pdo->prepare("UPDATE ttrss_entries SET
84
+                $sth = $pdo->prepare("UPDATE ttrss_entries SET
85 85
 					content = ?, content_hash = ? WHERE id = ?");
86
-				$sth->execute([$content, $content_hash, $ref_id]);
86
+                $sth->execute([$content, $content_hash, $ref_id]);
87 87
 
88
-				if (DB_TYPE == "pgsql"){
89
-					$sth = $pdo->prepare("UPDATE ttrss_entries
88
+                if (DB_TYPE == "pgsql"){
89
+                    $sth = $pdo->prepare("UPDATE ttrss_entries
90 90
 					SET tsvector_combined = to_tsvector( :ts_content)
91 91
 					WHERE id = :id");
92
-					$params = [
93
-						":ts_content" => mb_substr(strip_tags($content ), 0, 900000),
94
-						":id" => $ref_id];
95
-					$sth->execute($params);
96
-				}
92
+                    $params = [
93
+                        ":ts_content" => mb_substr(strip_tags($content ), 0, 900000),
94
+                        ":id" => $ref_id];
95
+                    $sth->execute($params);
96
+                }
97 97
 
98
-				$sth = $pdo->prepare("UPDATE ttrss_user_entries SET published = true,
98
+                $sth = $pdo->prepare("UPDATE ttrss_user_entries SET published = true,
99 99
 						last_published = NOW() WHERE
100 100
 						int_id = ? AND owner_uid = ?");
101
-				$sth->execute([$int_id, $owner_uid]);
101
+                $sth->execute([$int_id, $owner_uid]);
102 102
 
103
-			} else {
103
+            } else {
104 104
 
105
-				$sth = $pdo->prepare("INSERT INTO ttrss_user_entries
105
+                $sth = $pdo->prepare("INSERT INTO ttrss_user_entries
106 106
 					(ref_id, uuid, feed_id, orig_feed_id, owner_uid, published, tag_cache, label_cache,
107 107
 						last_read, note, unread, last_published)
108 108
 					VALUES
109 109
 					(?, '', NULL, NULL, ?, true, '', '', NOW(), '', false, NOW())");
110
-				$sth->execute([$ref_id, $owner_uid]);
111
-			}
110
+                $sth->execute([$ref_id, $owner_uid]);
111
+            }
112 112
 
113
-			if (count($labels) != 0) {
114
-				foreach ($labels as $label) {
115
-					Labels::add_article($ref_id, trim($label), $owner_uid);
116
-				}
117
-			}
113
+            if (count($labels) != 0) {
114
+                foreach ($labels as $label) {
115
+                    Labels::add_article($ref_id, trim($label), $owner_uid);
116
+                }
117
+            }
118 118
 
119
-			$rc = true;
119
+            $rc = true;
120 120
 
121
-		} else {
122
-			$sth = $pdo->prepare("INSERT INTO ttrss_entries
121
+        } else {
122
+            $sth = $pdo->prepare("INSERT INTO ttrss_entries
123 123
 				(title, guid, link, updated, content, content_hash, date_entered, date_updated)
124 124
 				VALUES
125 125
 				(?, ?, ?, NOW(), ?, ?, NOW(), NOW())");
126
-			$sth->execute([$title, $guid, $url, $content, $content_hash]);
126
+            $sth->execute([$title, $guid, $url, $content, $content_hash]);
127 127
 
128
-			$sth = $pdo->prepare("SELECT id FROM ttrss_entries WHERE guid = ?");
129
-			$sth->execute([$guid]);
128
+            $sth = $pdo->prepare("SELECT id FROM ttrss_entries WHERE guid = ?");
129
+            $sth->execute([$guid]);
130 130
 
131
-			if ($row = $sth->fetch()) {
132
-				$ref_id = $row["id"];
133
-				if (DB_TYPE == "pgsql"){
134
-					$sth = $pdo->prepare("UPDATE ttrss_entries
131
+            if ($row = $sth->fetch()) {
132
+                $ref_id = $row["id"];
133
+                if (DB_TYPE == "pgsql"){
134
+                    $sth = $pdo->prepare("UPDATE ttrss_entries
135 135
 					SET tsvector_combined = to_tsvector( :ts_content)
136 136
 					WHERE id = :id");
137
-					$params = [
138
-						":ts_content" => mb_substr(strip_tags($content ), 0, 900000),
139
-						":id" => $ref_id];
140
-					$sth->execute($params);
141
-				}
142
-				$sth = $pdo->prepare("INSERT INTO ttrss_user_entries
137
+                    $params = [
138
+                        ":ts_content" => mb_substr(strip_tags($content ), 0, 900000),
139
+                        ":id" => $ref_id];
140
+                    $sth->execute($params);
141
+                }
142
+                $sth = $pdo->prepare("INSERT INTO ttrss_user_entries
143 143
 					(ref_id, uuid, feed_id, orig_feed_id, owner_uid, published, tag_cache, label_cache,
144 144
 						last_read, note, unread, last_published)
145 145
 					VALUES
146 146
 					(?, '', NULL, NULL, ?, true, '', '', NOW(), '', false, NOW())");
147
-				$sth->execute([$ref_id, $owner_uid]);
147
+                $sth->execute([$ref_id, $owner_uid]);
148 148
 
149
-				if (count($labels) != 0) {
150
-					foreach ($labels as $label) {
151
-						Labels::add_article($ref_id, trim($label), $owner_uid);
152
-					}
153
-				}
149
+                if (count($labels) != 0) {
150
+                    foreach ($labels as $label) {
151
+                        Labels::add_article($ref_id, trim($label), $owner_uid);
152
+                    }
153
+                }
154 154
 
155
-				$rc = true;
156
-			}
157
-		}
155
+                $rc = true;
156
+            }
157
+        }
158 158
 
159
-		$pdo->commit();
159
+        $pdo->commit();
160 160
 
161
-		return $rc;
162
-	}
161
+        return $rc;
162
+    }
163 163
 
164
-	public function editArticleTags() {
164
+    public function editArticleTags() {
165 165
 
166
-		$param = clean($_REQUEST['param']);
166
+        $param = clean($_REQUEST['param']);
167 167
 
168
-		$tags = Article::get_article_tags($param);
168
+        $tags = Article::get_article_tags($param);
169 169
 
170
-		$tags_str = join(", ", $tags);
170
+        $tags_str = join(", ", $tags);
171 171
 
172
-		print_hidden("id", "$param");
173
-		print_hidden("op", "article");
174
-		print_hidden("method", "setArticleTags");
172
+        print_hidden("id", "$param");
173
+        print_hidden("op", "article");
174
+        print_hidden("method", "setArticleTags");
175 175
 
176
-		print "<header class='horizontal'>" . __("Tags for this article (separated by commas):")."</header>";
176
+        print "<header class='horizontal'>" . __("Tags for this article (separated by commas):")."</header>";
177 177
 
178
-		print "<section>";
179
-		print "<textarea dojoType='dijit.form.SimpleTextarea' rows='4'
178
+        print "<section>";
179
+        print "<textarea dojoType='dijit.form.SimpleTextarea' rows='4'
180 180
 			style='height : 100px; font-size : 12px; width : 98%' id='tags_str'
181 181
 			name='tags_str'>$tags_str</textarea>
182 182
 		<div class='autocomplete' id='tags_choices'
183 183
 				style='display:none'></div>";
184
-		print "</section>";
184
+        print "</section>";
185 185
 
186
-		print "<footer>";
187
-		print "<button dojoType='dijit.form.Button'
186
+        print "<footer>";
187
+        print "<button dojoType='dijit.form.Button'
188 188
 			type='submit' class='alt-primary' onclick=\"dijit.byId('editTagsDlg').execute()\">".__('Save')."</button> ";
189
-		print "<button dojoType='dijit.form.Button'
189
+        print "<button dojoType='dijit.form.Button'
190 190
 			onclick=\"dijit.byId('editTagsDlg').hide()\">".__('Cancel')."</button>";
191
-		print "</footer>";
191
+        print "</footer>";
192 192
 
193
-	}
193
+    }
194 194
 
195
-	public function setScore() {
196
-		$ids = explode(",", clean($_REQUEST['id']));
197
-		$score = (int)clean($_REQUEST['score']);
195
+    public function setScore() {
196
+        $ids = explode(",", clean($_REQUEST['id']));
197
+        $score = (int)clean($_REQUEST['score']);
198 198
 
199
-		$ids_qmarks = arr_qmarks($ids);
199
+        $ids_qmarks = arr_qmarks($ids);
200 200
 
201
-		$sth = $this->pdo->prepare("UPDATE ttrss_user_entries SET
201
+        $sth = $this->pdo->prepare("UPDATE ttrss_user_entries SET
202 202
 			score = ? WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
203 203
 
204
-		$sth->execute(array_merge([$score], $ids, [$_SESSION['uid']]));
204
+        $sth->execute(array_merge([$score], $ids, [$_SESSION['uid']]));
205 205
 
206
-		print json_encode(["id" => $ids, "score" => (int)$score]);
207
-	}
206
+        print json_encode(["id" => $ids, "score" => (int)$score]);
207
+    }
208 208
 
209
-	public function getScore() {
210
-		$id = clean($_REQUEST['id']);
209
+    public function getScore() {
210
+        $id = clean($_REQUEST['id']);
211 211
 
212
-		$sth = $this->pdo->prepare("SELECT score FROM ttrss_user_entries WHERE ref_id = ? AND owner_uid = ?");
213
-		$sth->execute([$id, $_SESSION['uid']]);
214
-		$row = $sth->fetch();
212
+        $sth = $this->pdo->prepare("SELECT score FROM ttrss_user_entries WHERE ref_id = ? AND owner_uid = ?");
213
+        $sth->execute([$id, $_SESSION['uid']]);
214
+        $row = $sth->fetch();
215 215
 
216
-		$score = $row['score'];
216
+        $score = $row['score'];
217 217
 
218
-		print json_encode(["id" => $id, "score" => (int)$score]);
219
-	}
218
+        print json_encode(["id" => $id, "score" => (int)$score]);
219
+    }
220 220
 
221 221
 
222
-	public function setArticleTags() {
222
+    public function setArticleTags() {
223 223
 
224
-		$id = clean($_REQUEST["id"]);
224
+        $id = clean($_REQUEST["id"]);
225 225
 
226
-		$tags_str = clean($_REQUEST["tags_str"]);
227
-		$tags = array_unique(trim_array(explode(",", $tags_str)));
226
+        $tags_str = clean($_REQUEST["tags_str"]);
227
+        $tags = array_unique(trim_array(explode(",", $tags_str)));
228 228
 
229
-		$this->pdo->beginTransaction();
229
+        $this->pdo->beginTransaction();
230 230
 
231
-		$sth = $this->pdo->prepare("SELECT int_id FROM ttrss_user_entries WHERE
231
+        $sth = $this->pdo->prepare("SELECT int_id FROM ttrss_user_entries WHERE
232 232
 				ref_id = ? AND owner_uid = ? LIMIT 1");
233
-		$sth->execute([$id, $_SESSION['uid']]);
233
+        $sth->execute([$id, $_SESSION['uid']]);
234 234
 
235
-		if ($row = $sth->fetch()) {
235
+        if ($row = $sth->fetch()) {
236 236
 
237
-			$tags_to_cache = array();
237
+            $tags_to_cache = array();
238 238
 
239
-			$int_id = $row['int_id'];
239
+            $int_id = $row['int_id'];
240 240
 
241
-			$sth = $this->pdo->prepare("DELETE FROM ttrss_tags WHERE
241
+            $sth = $this->pdo->prepare("DELETE FROM ttrss_tags WHERE
242 242
 				post_int_id = ? AND owner_uid = ?");
243
-			$sth->execute([$int_id, $_SESSION['uid']]);
243
+            $sth->execute([$int_id, $_SESSION['uid']]);
244 244
 
245
-			$tags = FeedItem_Common::normalize_categories($tags);
245
+            $tags = FeedItem_Common::normalize_categories($tags);
246 246
 
247
-			foreach ($tags as $tag) {
248
-				if ($tag != '') {
249
-					$sth = $this->pdo->prepare("INSERT INTO ttrss_tags
247
+            foreach ($tags as $tag) {
248
+                if ($tag != '') {
249
+                    $sth = $this->pdo->prepare("INSERT INTO ttrss_tags
250 250
 								(post_int_id, owner_uid, tag_name)
251 251
 								VALUES (?, ?, ?)");
252 252
 
253
-					$sth->execute([$int_id, $_SESSION['uid'], $tag]);
254
-				}
253
+                    $sth->execute([$int_id, $_SESSION['uid'], $tag]);
254
+                }
255 255
 
256
-				array_push($tags_to_cache, $tag);
257
-			}
256
+                array_push($tags_to_cache, $tag);
257
+            }
258 258
 
259
-			/* update tag cache */
259
+            /* update tag cache */
260 260
 
261
-			$tags_str = join(",", $tags_to_cache);
261
+            $tags_str = join(",", $tags_to_cache);
262 262
 
263
-			$sth = $this->pdo->prepare("UPDATE ttrss_user_entries
263
+            $sth = $this->pdo->prepare("UPDATE ttrss_user_entries
264 264
 				SET tag_cache = ? WHERE ref_id = ? AND owner_uid = ?");
265
-			$sth->execute([$tags_str, $id, $_SESSION['uid']]);
266
-		}
265
+            $sth->execute([$tags_str, $id, $_SESSION['uid']]);
266
+        }
267 267
 
268
-		$this->pdo->commit();
268
+        $this->pdo->commit();
269 269
 
270
-		$tags = Article::get_article_tags($id);
271
-		$tags_str = $this->format_tags_string($tags);
272
-		$tags_str_full = join(", ", $tags);
270
+        $tags = Article::get_article_tags($id);
271
+        $tags_str = $this->format_tags_string($tags);
272
+        $tags_str_full = join(", ", $tags);
273 273
 
274
-		if (!$tags_str_full) $tags_str_full = __("no tags");
274
+        if (!$tags_str_full) $tags_str_full = __("no tags");
275 275
 
276
-		print json_encode([
277
-			"id" => (int) $id,
278
-			"content" => $tags_str,
279
-			"content_full" => $tags_str_full
280
-		]);
281
-	}
276
+        print json_encode([
277
+            "id" => (int) $id,
278
+            "content" => $tags_str,
279
+            "content_full" => $tags_str_full
280
+        ]);
281
+    }
282 282
 
283 283
 
284
-	public function completeTags() {
285
-		$search = clean($_REQUEST["search"]);
284
+    public function completeTags() {
285
+        $search = clean($_REQUEST["search"]);
286 286
 
287
-		$sth = $this->pdo->prepare("SELECT DISTINCT tag_name FROM ttrss_tags
287
+        $sth = $this->pdo->prepare("SELECT DISTINCT tag_name FROM ttrss_tags
288 288
 				WHERE owner_uid = ? AND
289 289
 				tag_name LIKE ? ORDER BY tag_name
290 290
 				LIMIT 10");
291 291
 
292
-		$sth->execute([$_SESSION['uid'], "$search%"]);
292
+        $sth->execute([$_SESSION['uid'], "$search%"]);
293 293
 
294
-		print "<ul>";
295
-		while ($line = $sth->fetch()) {
296
-			print "<li>" . $line["tag_name"] . "</li>";
297
-		}
298
-		print "</ul>";
299
-	}
294
+        print "<ul>";
295
+        while ($line = $sth->fetch()) {
296
+            print "<li>" . $line["tag_name"] . "</li>";
297
+        }
298
+        print "</ul>";
299
+    }
300 300
 
301
-	public function assigntolabel() {
302
-		return $this->labelops(true);
303
-	}
301
+    public function assigntolabel() {
302
+        return $this->labelops(true);
303
+    }
304 304
 
305
-	public function removefromlabel() {
306
-		return $this->labelops(false);
307
-	}
305
+    public function removefromlabel() {
306
+        return $this->labelops(false);
307
+    }
308 308
 
309
-	private function labelops($assign) {
310
-		$reply = array();
309
+    private function labelops($assign) {
310
+        $reply = array();
311 311
 
312
-		$ids = explode(",", clean($_REQUEST["ids"]));
313
-		$label_id = clean($_REQUEST["lid"]);
312
+        $ids = explode(",", clean($_REQUEST["ids"]));
313
+        $label_id = clean($_REQUEST["lid"]);
314 314
 
315
-		$label = Labels::find_caption($label_id, $_SESSION["uid"]);
315
+        $label = Labels::find_caption($label_id, $_SESSION["uid"]);
316 316
 
317
-		$reply["info-for-headlines"] = array();
317
+        $reply["info-for-headlines"] = array();
318 318
 
319
-		if ($label) {
319
+        if ($label) {
320 320
 
321
-			foreach ($ids as $id) {
321
+            foreach ($ids as $id) {
322 322
 
323
-				if ($assign)
324
-					Labels::add_article($id, $label, $_SESSION["uid"]);
325
-				else
326
-					Labels::remove_article($id, $label, $_SESSION["uid"]);
323
+                if ($assign)
324
+                    Labels::add_article($id, $label, $_SESSION["uid"]);
325
+                else
326
+                    Labels::remove_article($id, $label, $_SESSION["uid"]);
327 327
 
328
-				$labels = $this->get_article_labels($id, $_SESSION["uid"]);
328
+                $labels = $this->get_article_labels($id, $_SESSION["uid"]);
329 329
 
330
-				array_push($reply["info-for-headlines"],
331
-				array("id" => $id, "labels" => $this->format_article_labels($labels)));
330
+                array_push($reply["info-for-headlines"],
331
+                array("id" => $id, "labels" => $this->format_article_labels($labels)));
332 332
 
333
-			}
334
-		}
333
+            }
334
+        }
335 335
 
336
-		$reply["message"] = "UPDATE_COUNTERS";
336
+        $reply["message"] = "UPDATE_COUNTERS";
337 337
 
338
-		print json_encode($reply);
339
-	}
338
+        print json_encode($reply);
339
+    }
340 340
 
341
-	public function getArticleFeed($id) {
342
-		$sth = $this->pdo->prepare("SELECT feed_id FROM ttrss_user_entries
341
+    public function getArticleFeed($id) {
342
+        $sth = $this->pdo->prepare("SELECT feed_id FROM ttrss_user_entries
343 343
 			WHERE ref_id = ? AND owner_uid = ?");
344
-		$sth->execute([$id, $_SESSION['uid']]);
344
+        $sth->execute([$id, $_SESSION['uid']]);
345 345
 
346
-		if ($row = $sth->fetch()) {
347
-			return $row["feed_id"];
348
-		} else {
349
-			return 0;
350
-		}
351
-	}
346
+        if ($row = $sth->fetch()) {
347
+            return $row["feed_id"];
348
+        } else {
349
+            return 0;
350
+        }
351
+    }
352 352
 
353
-	public static function format_article_enclosures($id, $always_display_enclosures,
354
-									   $article_content, $hide_images = false) {
353
+    public static function format_article_enclosures($id, $always_display_enclosures,
354
+                                        $article_content, $hide_images = false) {
355 355
 
356
-		$result = Article::get_article_enclosures($id);
357
-		$rv = '';
356
+        $result = Article::get_article_enclosures($id);
357
+        $rv = '';
358 358
 
359
-		foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_FORMAT_ENCLOSURES) as $plugin) {
360
-			$retval = $plugin->hook_format_enclosures($rv, $result, $id, $always_display_enclosures, $article_content, $hide_images);
361
-			if (is_array($retval)) {
362
-				$rv = $retval[0];
363
-				$result = $retval[1];
364
-			} else {
365
-				$rv = $retval;
366
-			}
367
-		}
368
-		unset($retval); // Unset to prevent breaking render if there are no HOOK_RENDER_ENCLOSURE hooks below.
359
+        foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_FORMAT_ENCLOSURES) as $plugin) {
360
+            $retval = $plugin->hook_format_enclosures($rv, $result, $id, $always_display_enclosures, $article_content, $hide_images);
361
+            if (is_array($retval)) {
362
+                $rv = $retval[0];
363
+                $result = $retval[1];
364
+            } else {
365
+                $rv = $retval;
366
+            }
367
+        }
368
+        unset($retval); // Unset to prevent breaking render if there are no HOOK_RENDER_ENCLOSURE hooks below.
369 369
 
370
-		if ($rv === '' && !empty($result)) {
371
-			$entries_html = array();
372
-			$entries = array();
373
-			$entries_inline = array();
370
+        if ($rv === '' && !empty($result)) {
371
+            $entries_html = array();
372
+            $entries = array();
373
+            $entries_inline = array();
374 374
 
375
-			foreach ($result as $line) {
375
+            foreach ($result as $line) {
376 376
 
377
-				foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ENCLOSURE_ENTRY) as $plugin) {
378
-					$line = $plugin->hook_enclosure_entry($line, $id);
379
-				}
377
+                foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ENCLOSURE_ENTRY) as $plugin) {
378
+                    $line = $plugin->hook_enclosure_entry($line, $id);
379
+                }
380 380
 
381
-				$url = $line["content_url"];
382
-				$ctype = $line["content_type"];
383
-				$title = $line["title"];
384
-				$width = $line["width"];
385
-				$height = $line["height"];
381
+                $url = $line["content_url"];
382
+                $ctype = $line["content_type"];
383
+                $title = $line["title"];
384
+                $width = $line["width"];
385
+                $height = $line["height"];
386 386
 
387
-				if (!$ctype) $ctype = __("unknown type");
387
+                if (!$ctype) $ctype = __("unknown type");
388 388
 
389
-				//$filename = substr($url, strrpos($url, "/")+1);
390
-				$filename = basename($url);
389
+                //$filename = substr($url, strrpos($url, "/")+1);
390
+                $filename = basename($url);
391 391
 
392
-				$player = format_inline_player($url, $ctype);
392
+                $player = format_inline_player($url, $ctype);
393 393
 
394
-				if ($player) array_push($entries_inline, $player);
394
+                if ($player) array_push($entries_inline, $player);
395 395
 
396 396
 #				$entry .= " <a target=\"_blank\" href=\"" . htmlspecialchars($url) . "\" rel=\"noopener noreferrer\">" .
397 397
 #					$filename . " (" . $ctype . ")" . "</a>";
398 398
 
399
-				$entry = "<div onclick=\"popupOpenUrl('".htmlspecialchars($url)."')\"
399
+                $entry = "<div onclick=\"popupOpenUrl('".htmlspecialchars($url)."')\"
400 400
 					dojoType=\"dijit.MenuItem\">$filename ($ctype)</div>";
401 401
 
402
-				array_push($entries_html, $entry);
402
+                array_push($entries_html, $entry);
403 403
 
404
-				$entry = array();
404
+                $entry = array();
405 405
 
406
-				$entry["type"] = $ctype;
407
-				$entry["filename"] = $filename;
408
-				$entry["url"] = $url;
409
-				$entry["title"] = $title;
410
-				$entry["width"] = $width;
411
-				$entry["height"] = $height;
406
+                $entry["type"] = $ctype;
407
+                $entry["filename"] = $filename;
408
+                $entry["url"] = $url;
409
+                $entry["title"] = $title;
410
+                $entry["width"] = $width;
411
+                $entry["height"] = $height;
412 412
 
413
-				array_push($entries, $entry);
414
-			}
413
+                array_push($entries, $entry);
414
+            }
415 415
 
416
-			if ($_SESSION['uid'] && !get_pref("STRIP_IMAGES") && !$_SESSION["bw_limit"]) {
417
-				if ($always_display_enclosures ||
418
-					!preg_match("/<img/i", $article_content)) {
416
+            if ($_SESSION['uid'] && !get_pref("STRIP_IMAGES") && !$_SESSION["bw_limit"]) {
417
+                if ($always_display_enclosures ||
418
+                    !preg_match("/<img/i", $article_content)) {
419 419
 
420
-					foreach ($entries as $entry) {
420
+                    foreach ($entries as $entry) {
421 421
 
422
-						foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ENCLOSURE) as $plugin)
423
-							$retval = $plugin->hook_render_enclosure($entry, $hide_images);
422
+                        foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ENCLOSURE) as $plugin)
423
+                            $retval = $plugin->hook_render_enclosure($entry, $hide_images);
424 424
 
425 425
 
426
-						if ($retval) {
427
-							$rv .= $retval;
428
-						} else {
426
+                        if ($retval) {
427
+                            $rv .= $retval;
428
+                        } else {
429 429
 
430
-							if (preg_match("/image/", $entry["type"])) {
430
+                            if (preg_match("/image/", $entry["type"])) {
431 431
 
432
-								if (!$hide_images) {
433
-									$encsize = '';
434
-									if ($entry['height'] > 0)
435
-										$encsize .= ' height="' . intval($entry['height']) . '"';
436
-									if ($entry['width'] > 0)
437
-										$encsize .= ' width="' . intval($entry['width']) . '"';
438
-									$rv .= "<p><img
432
+                                if (!$hide_images) {
433
+                                    $encsize = '';
434
+                                    if ($entry['height'] > 0)
435
+                                        $encsize .= ' height="' . intval($entry['height']) . '"';
436
+                                    if ($entry['width'] > 0)
437
+                                        $encsize .= ' width="' . intval($entry['width']) . '"';
438
+                                    $rv .= "<p><img
439 439
 										alt=\"".htmlspecialchars($entry["filename"])."\"
440 440
 										src=\"" .htmlspecialchars($entry["url"]) . "\"
441 441
 										" . $encsize . " /></p>";
442
-								} else {
443
-									$rv .= "<p><a target=\"_blank\" rel=\"noopener noreferrer\"
442
+                                } else {
443
+                                    $rv .= "<p><a target=\"_blank\" rel=\"noopener noreferrer\"
444 444
 										href=\"".htmlspecialchars($entry["url"])."\"
445 445
 										>" .htmlspecialchars($entry["url"]) . "</a></p>";
446
-								}
447
-
448
-								if ($entry['title']) {
449
-									$rv.= "<div class=\"enclosure_title\">${entry['title']}</div>";
450
-								}
451
-							}
452
-						}
453
-					}
454
-				}
455
-			}
456
-
457
-			if (count($entries_inline) > 0) {
458
-				//$rv .= "<hr clear='both'/>";
459
-				foreach ($entries_inline as $entry) { $rv .= $entry; };
460
-				$rv .= "<br clear='both'/>";
461
-			}
462
-
463
-			$rv .= "<div class=\"attachments\" dojoType=\"fox.form.DropDownButton\">".
464
-				"<span>" . __('Attachments')."</span>";
465
-
466
-			$rv .= "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
467
-
468
-			foreach ($entries as $entry) {
469
-				if ($entry["title"])
470
-					$title = " &mdash; " . truncate_string($entry["title"], 30);
471
-				else
472
-					$title = "";
473
-
474
-				if ($entry["filename"])
475
-					$filename = truncate_middle(htmlspecialchars($entry["filename"]), 60);
476
-				else
477
-					$filename = "";
478
-
479
-				$rv .= "<div onclick='popupOpenUrl(\"".htmlspecialchars($entry["url"])."\")'
446
+                                }
447
+
448
+                                if ($entry['title']) {
449
+                                    $rv.= "<div class=\"enclosure_title\">${entry['title']}</div>";
450
+                                }
451
+                            }
452
+                        }
453
+                    }
454
+                }
455
+            }
456
+
457
+            if (count($entries_inline) > 0) {
458
+                //$rv .= "<hr clear='both'/>";
459
+                foreach ($entries_inline as $entry) { $rv .= $entry; };
460
+                $rv .= "<br clear='both'/>";
461
+            }
462
+
463
+            $rv .= "<div class=\"attachments\" dojoType=\"fox.form.DropDownButton\">".
464
+                "<span>" . __('Attachments')."</span>";
465
+
466
+            $rv .= "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
467
+
468
+            foreach ($entries as $entry) {
469
+                if ($entry["title"])
470
+                    $title = " &mdash; " . truncate_string($entry["title"], 30);
471
+                else
472
+                    $title = "";
473
+
474
+                if ($entry["filename"])
475
+                    $filename = truncate_middle(htmlspecialchars($entry["filename"]), 60);
476
+                else
477
+                    $filename = "";
478
+
479
+                $rv .= "<div onclick='popupOpenUrl(\"".htmlspecialchars($entry["url"])."\")'
480 480
 					dojoType=\"dijit.MenuItem\">".$filename . $title."</div>";
481 481
 
482
-			};
482
+            };
483 483
 
484
-			$rv .= "</div>";
485
-			$rv .= "</div>";
486
-		}
484
+            $rv .= "</div>";
485
+            $rv .= "</div>";
486
+        }
487 487
 
488
-		return $rv;
489
-	}
488
+        return $rv;
489
+    }
490 490
 
491
-	public static function get_article_tags($id, $owner_uid = 0, $tag_cache = false) {
491
+    public static function get_article_tags($id, $owner_uid = 0, $tag_cache = false) {
492 492
 
493
-		$a_id = $id;
493
+        $a_id = $id;
494 494
 
495
-		if (!$owner_uid) $owner_uid = $_SESSION["uid"];
495
+        if (!$owner_uid) $owner_uid = $_SESSION["uid"];
496 496
 
497
-		$pdo = Db::pdo();
497
+        $pdo = Db::pdo();
498 498
 
499
-		$sth = $pdo->prepare("SELECT DISTINCT tag_name,
499
+        $sth = $pdo->prepare("SELECT DISTINCT tag_name,
500 500
 			owner_uid as owner FROM	ttrss_tags
501 501
 			WHERE post_int_id = (SELECT int_id FROM ttrss_user_entries WHERE
502 502
 			ref_id = ? AND owner_uid = ? LIMIT 1) ORDER BY tag_name");
503 503
 
504
-		$tags = array();
504
+        $tags = array();
505 505
 
506
-		/* check cache first */
506
+        /* check cache first */
507 507
 
508
-		if ($tag_cache === false) {
509
-			$csth = $pdo->prepare("SELECT tag_cache FROM ttrss_user_entries
508
+        if ($tag_cache === false) {
509
+            $csth = $pdo->prepare("SELECT tag_cache FROM ttrss_user_entries
510 510
 				WHERE ref_id = ? AND owner_uid = ?");
511
-			$csth->execute([$id, $owner_uid]);
511
+            $csth->execute([$id, $owner_uid]);
512 512
 
513
-			if ($row = $csth->fetch()) $tag_cache = $row["tag_cache"];
514
-		}
513
+            if ($row = $csth->fetch()) $tag_cache = $row["tag_cache"];
514
+        }
515 515
 
516
-		if ($tag_cache) {
517
-			$tags = explode(",", $tag_cache);
518
-		} else {
516
+        if ($tag_cache) {
517
+            $tags = explode(",", $tag_cache);
518
+        } else {
519 519
 
520
-			/* do it the hard way */
520
+            /* do it the hard way */
521 521
 
522
-			$sth->execute([$a_id, $owner_uid]);
522
+            $sth->execute([$a_id, $owner_uid]);
523 523
 
524
-			while ($tmp_line = $sth->fetch()) {
525
-				array_push($tags, $tmp_line["tag_name"]);
526
-			}
524
+            while ($tmp_line = $sth->fetch()) {
525
+                array_push($tags, $tmp_line["tag_name"]);
526
+            }
527 527
 
528
-			/* update the cache */
528
+            /* update the cache */
529 529
 
530
-			$tags_str = join(",", $tags);
530
+            $tags_str = join(",", $tags);
531 531
 
532
-			$sth = $pdo->prepare("UPDATE ttrss_user_entries
532
+            $sth = $pdo->prepare("UPDATE ttrss_user_entries
533 533
 				SET tag_cache = ? WHERE ref_id = ?
534 534
 				AND owner_uid = ?");
535
-			$sth->execute([$tags_str, $id, $owner_uid]);
536
-		}
535
+            $sth->execute([$tags_str, $id, $owner_uid]);
536
+        }
537 537
 
538
-		return $tags;
539
-	}
538
+        return $tags;
539
+    }
540 540
 
541
-	public static function format_tags_string($tags) {
542
-		if (!is_array($tags) || count($tags) == 0) {
543
-			return __("no tags");
544
-		} else {
545
-			$maxtags = min(5, count($tags));
546
-			$tags_str = "";
541
+    public static function format_tags_string($tags) {
542
+        if (!is_array($tags) || count($tags) == 0) {
543
+            return __("no tags");
544
+        } else {
545
+            $maxtags = min(5, count($tags));
546
+            $tags_str = "";
547 547
 
548
-			for ($i = 0; $i < $maxtags; $i++) {
549
-				$tags_str .= "<a class=\"tag\" href=\"#\" onclick=\"Feeds.open({feed:'".$tags[$i]."'})\">" . $tags[$i] . "</a>, ";
550
-			}
548
+            for ($i = 0; $i < $maxtags; $i++) {
549
+                $tags_str .= "<a class=\"tag\" href=\"#\" onclick=\"Feeds.open({feed:'".$tags[$i]."'})\">" . $tags[$i] . "</a>, ";
550
+            }
551 551
 
552
-			$tags_str = mb_substr($tags_str, 0, mb_strlen($tags_str)-2);
552
+            $tags_str = mb_substr($tags_str, 0, mb_strlen($tags_str)-2);
553 553
 
554
-			if (count($tags) > $maxtags)
555
-				$tags_str .= ", &hellip;";
554
+            if (count($tags) > $maxtags)
555
+                $tags_str .= ", &hellip;";
556 556
 
557
-			return $tags_str;
558
-		}
559
-	}
557
+            return $tags_str;
558
+        }
559
+    }
560 560
 
561
-	public static function format_article_labels($labels) {
561
+    public static function format_article_labels($labels) {
562 562
 
563
-		if (!is_array($labels)) return '';
563
+        if (!is_array($labels)) return '';
564 564
 
565
-		$labels_str = "";
565
+        $labels_str = "";
566 566
 
567
-		foreach ($labels as $l) {
568
-			$labels_str .= sprintf("<div class='label'
567
+        foreach ($labels as $l) {
568
+            $labels_str .= sprintf("<div class='label'
569 569
 				style='color : %s; background-color : %s'>%s</div>",
570
-				$l[2], $l[3], $l[1]);
571
-		}
570
+                $l[2], $l[3], $l[1]);
571
+        }
572 572
 
573
-		return $labels_str;
573
+        return $labels_str;
574 574
 
575
-	}
575
+    }
576 576
 
577
-	public static function format_article_note($id, $note, $allow_edit = true) {
577
+    public static function format_article_note($id, $note, $allow_edit = true) {
578 578
 
579
-		if ($allow_edit) {
580
-			$onclick = "onclick='Plugins.Note.edit($id)'";
581
-			$note_class = 'editable';
582
-		} else {
583
-			$onclick = '';
584
-			$note_class = '';
585
-		}
579
+        if ($allow_edit) {
580
+            $onclick = "onclick='Plugins.Note.edit($id)'";
581
+            $note_class = 'editable';
582
+        } else {
583
+            $onclick = '';
584
+            $note_class = '';
585
+        }
586 586
 
587
-		return "<div class='article-note $note_class'>
587
+        return "<div class='article-note $note_class'>
588 588
 			<i class='material-icons'>note</i>
589 589
 			<div $onclick class='body'>$note</div>
590 590
 			</div>";
591
-	}
591
+    }
592 592
 
593
-	public static function get_article_enclosures($id) {
593
+    public static function get_article_enclosures($id) {
594 594
 
595
-		$pdo = Db::pdo();
595
+        $pdo = Db::pdo();
596 596
 
597
-		$sth = $pdo->prepare("SELECT * FROM ttrss_enclosures
597
+        $sth = $pdo->prepare("SELECT * FROM ttrss_enclosures
598 598
 			WHERE post_id = ? AND content_url != ''");
599
-		$sth->execute([$id]);
599
+        $sth->execute([$id]);
600 600
 
601
-		$rv = array();
601
+        $rv = array();
602 602
 
603
-		$cache = new DiskCache("images");
603
+        $cache = new DiskCache("images");
604 604
 
605
-		while ($line = $sth->fetch()) {
605
+        while ($line = $sth->fetch()) {
606 606
 
607
-			if ($cache->exists(sha1($line["content_url"]))) {
608
-				$line["content_url"] = $cache->getUrl(sha1($line["content_url"]));
609
-			}
607
+            if ($cache->exists(sha1($line["content_url"]))) {
608
+                $line["content_url"] = $cache->getUrl(sha1($line["content_url"]));
609
+            }
610 610
 
611
-			array_push($rv, $line);
612
-		}
611
+            array_push($rv, $line);
612
+        }
613 613
 
614
-		return $rv;
615
-	}
614
+        return $rv;
615
+    }
616 616
 
617
-	public static function purge_orphans() {
617
+    public static function purge_orphans() {
618 618
 
619 619
         // purge orphaned posts in main content table
620 620
 
@@ -633,169 +633,169 @@  discard block
 block discarded – undo
633 633
         }
634 634
     }
635 635
 
636
-	public static function catchupArticlesById($ids, $cmode, $owner_uid = false) {
636
+    public static function catchupArticlesById($ids, $cmode, $owner_uid = false) {
637 637
 
638
-		if (!$owner_uid) $owner_uid = $_SESSION["uid"];
638
+        if (!$owner_uid) $owner_uid = $_SESSION["uid"];
639 639
 
640
-		$pdo = Db::pdo();
640
+        $pdo = Db::pdo();
641 641
 
642
-		$ids_qmarks = arr_qmarks($ids);
642
+        $ids_qmarks = arr_qmarks($ids);
643 643
 
644
-		if ($cmode == 1) {
645
-			$sth = $pdo->prepare("UPDATE ttrss_user_entries SET
644
+        if ($cmode == 1) {
645
+            $sth = $pdo->prepare("UPDATE ttrss_user_entries SET
646 646
 				unread = true
647 647
 					WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
648
-		} else if ($cmode == 2) {
649
-			$sth = $pdo->prepare("UPDATE ttrss_user_entries SET
648
+        } else if ($cmode == 2) {
649
+            $sth = $pdo->prepare("UPDATE ttrss_user_entries SET
650 650
 				unread = NOT unread,last_read = NOW()
651 651
 					WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
652
-		} else {
653
-			$sth = $pdo->prepare("UPDATE ttrss_user_entries SET
652
+        } else {
653
+            $sth = $pdo->prepare("UPDATE ttrss_user_entries SET
654 654
 				unread = false,last_read = NOW()
655 655
 					WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
656
-		}
656
+        }
657 657
 
658
-		$sth->execute(array_merge($ids, [$owner_uid]));
658
+        $sth->execute(array_merge($ids, [$owner_uid]));
659 659
 
660
-		/* update ccache */
660
+        /* update ccache */
661 661
 
662
-		$sth = $pdo->prepare("SELECT DISTINCT feed_id FROM ttrss_user_entries
662
+        $sth = $pdo->prepare("SELECT DISTINCT feed_id FROM ttrss_user_entries
663 663
 			WHERE ref_id IN ($ids_qmarks) AND owner_uid = ?");
664
-		$sth->execute(array_merge($ids, [$owner_uid]));
664
+        $sth->execute(array_merge($ids, [$owner_uid]));
665 665
 
666
-		while ($line = $sth->fetch()) {
667
-			CCache::update($line["feed_id"], $owner_uid);
668
-		}
669
-	}
666
+        while ($line = $sth->fetch()) {
667
+            CCache::update($line["feed_id"], $owner_uid);
668
+        }
669
+    }
670 670
 
671
-	public static function getLastArticleId() {
672
-		$pdo = DB::pdo();
671
+    public static function getLastArticleId() {
672
+        $pdo = DB::pdo();
673 673
 
674
-		$sth = $pdo->prepare("SELECT ref_id AS id FROM ttrss_user_entries
674
+        $sth = $pdo->prepare("SELECT ref_id AS id FROM ttrss_user_entries
675 675
 			WHERE owner_uid = ? ORDER BY ref_id DESC LIMIT 1");
676
-		$sth->execute([$_SESSION['uid']]);
676
+        $sth->execute([$_SESSION['uid']]);
677 677
 
678
-		if ($row = $sth->fetch()) {
679
-			return $row['id'];
680
-		} else {
681
-			return -1;
682
-		}
683
-	}
678
+        if ($row = $sth->fetch()) {
679
+            return $row['id'];
680
+        } else {
681
+            return -1;
682
+        }
683
+    }
684 684
 
685
-	public static function get_article_labels($id, $owner_uid = false) {
686
-		$rv = array();
685
+    public static function get_article_labels($id, $owner_uid = false) {
686
+        $rv = array();
687 687
 
688
-		if (!$owner_uid) $owner_uid = $_SESSION["uid"];
688
+        if (!$owner_uid) $owner_uid = $_SESSION["uid"];
689 689
 
690
-		$pdo = Db::pdo();
690
+        $pdo = Db::pdo();
691 691
 
692
-		$sth = $pdo->prepare("SELECT label_cache FROM
692
+        $sth = $pdo->prepare("SELECT label_cache FROM
693 693
 			ttrss_user_entries WHERE ref_id = ? AND owner_uid = ?");
694
-		$sth->execute([$id, $owner_uid]);
694
+        $sth->execute([$id, $owner_uid]);
695 695
 
696
-		if ($row = $sth->fetch()) {
697
-			$label_cache = $row["label_cache"];
696
+        if ($row = $sth->fetch()) {
697
+            $label_cache = $row["label_cache"];
698 698
 
699
-			if ($label_cache) {
700
-				$tmp = json_decode($label_cache, true);
699
+            if ($label_cache) {
700
+                $tmp = json_decode($label_cache, true);
701 701
 
702
-				if (!$tmp || $tmp["no-labels"] == 1)
703
-					return $rv;
704
-				else
705
-					return $tmp;
706
-			}
707
-		}
702
+                if (!$tmp || $tmp["no-labels"] == 1)
703
+                    return $rv;
704
+                else
705
+                    return $tmp;
706
+            }
707
+        }
708 708
 
709
-		$sth = $pdo->prepare("SELECT DISTINCT label_id,caption,fg_color,bg_color
709
+        $sth = $pdo->prepare("SELECT DISTINCT label_id,caption,fg_color,bg_color
710 710
 				FROM ttrss_labels2, ttrss_user_labels2
711 711
 			WHERE id = label_id
712 712
 				AND article_id = ?
713 713
 				AND owner_uid = ?
714 714
 			ORDER BY caption");
715
-		$sth->execute([$id, $owner_uid]);
716
-
717
-		while ($line = $sth->fetch()) {
718
-			$rk = array(Labels::label_to_feed_id($line["label_id"]),
719
-				$line["caption"], $line["fg_color"],
720
-				$line["bg_color"]);
721
-			array_push($rv, $rk);
722
-		}
723
-
724
-		if (count($rv) > 0)
725
-			Labels::update_cache($owner_uid, $id, $rv);
726
-		else
727
-			Labels::update_cache($owner_uid, $id, array("no-labels" => 1));
728
-
729
-		return $rv;
730
-	}
731
-
732
-	public static function get_article_image($enclosures, $content, $site_url) {
733
-
734
-		$article_image = "";
735
-		$article_stream = "";
736
-
737
-		foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_IMAGE) as $p) {
738
-			list ($article_image, $article_stream, $content) = $p->hook_article_image($enclosures, $content, $site_url);
739
-		}
740
-
741
-		if (!$article_image && !$article_stream) {
742
-			$tmpdoc = new DOMDocument();
743
-
744
-			if (@$tmpdoc->loadHTML('<?xml encoding="UTF-8">' . mb_substr($content, 0, 131070))) {
745
-				$tmpxpath = new DOMXPath($tmpdoc);
746
-				$elems = $tmpxpath->query('(//img[@src]|//video[@poster]|//iframe[contains(@src , "youtube.com/embed/")])');
747
-
748
-				foreach ($elems as $e) {
749
-					if ($e->nodeName == "iframe") {
750
-						$matches = [];
751
-						if (preg_match("/\/embed\/([\w-]+)/", $e->getAttribute("src"), $matches)) {
752
-							$article_image = "https://img.youtube.com/vi/" . $matches[1] . "/hqdefault.jpg";
753
-							$article_stream = "https://youtu.be/" . $matches[1];
754
-							break;
755
-						}
756
-					} else if ($e->nodeName == "video") {
757
-						$article_image = $e->getAttribute("poster");
758
-
759
-						$src = $tmpxpath->query("//source[@src]", $e)->item(0);
760
-
761
-						if ($src) {
762
-							$article_stream = $src->getAttribute("src");
763
-						}
764
-
765
-						break;
766
-					} else if ($e->nodeName == 'img') {
767
-						if (mb_strpos($e->getAttribute("src"), "data:") !== 0) {
768
-							$article_image = $e->getAttribute("src");
769
-						}
770
-						break;
771
-					}
772
-				}
773
-			}
774
-
775
-			if (!$article_image)
776
-				foreach ($enclosures as $enc) {
777
-					if (strpos($enc["content_type"], "image/") !== false) {
778
-						$article_image = $enc["content_url"];
779
-						break;
780
-					}
781
-				}
782
-
783
-			if ($article_image)
784
-				$article_image = rewrite_relative_url($site_url, $article_image);
785
-
786
-			if ($article_stream)
787
-				$article_stream = rewrite_relative_url($site_url, $article_stream);
788
-		}
789
-
790
-		$cache = new DiskCache("images");
791
-
792
-		if ($article_image && $cache->exists(sha1($article_image)))
793
-			$article_image = $cache->getUrl(sha1($article_image));
794
-
795
-		if ($article_stream && $cache->exists(sha1($article_stream)))
796
-			$article_stream = $cache->getUrl(sha1($article_stream));
797
-
798
-		return [$article_image, $article_stream];
799
-	}
715
+        $sth->execute([$id, $owner_uid]);
716
+
717
+        while ($line = $sth->fetch()) {
718
+            $rk = array(Labels::label_to_feed_id($line["label_id"]),
719
+                $line["caption"], $line["fg_color"],
720
+                $line["bg_color"]);
721
+            array_push($rv, $rk);
722
+        }
723
+
724
+        if (count($rv) > 0)
725
+            Labels::update_cache($owner_uid, $id, $rv);
726
+        else
727
+            Labels::update_cache($owner_uid, $id, array("no-labels" => 1));
728
+
729
+        return $rv;
730
+    }
731
+
732
+    public static function get_article_image($enclosures, $content, $site_url) {
733
+
734
+        $article_image = "";
735
+        $article_stream = "";
736
+
737
+        foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_ARTICLE_IMAGE) as $p) {
738
+            list ($article_image, $article_stream, $content) = $p->hook_article_image($enclosures, $content, $site_url);
739
+        }
740
+
741
+        if (!$article_image && !$article_stream) {
742
+            $tmpdoc = new DOMDocument();
743
+
744
+            if (@$tmpdoc->loadHTML('<?xml encoding="UTF-8">' . mb_substr($content, 0, 131070))) {
745
+                $tmpxpath = new DOMXPath($tmpdoc);
746
+                $elems = $tmpxpath->query('(//img[@src]|//video[@poster]|//iframe[contains(@src , "youtube.com/embed/")])');
747
+
748
+                foreach ($elems as $e) {
749
+                    if ($e->nodeName == "iframe") {
750
+                        $matches = [];
751
+                        if (preg_match("/\/embed\/([\w-]+)/", $e->getAttribute("src"), $matches)) {
752
+                            $article_image = "https://img.youtube.com/vi/" . $matches[1] . "/hqdefault.jpg";
753
+                            $article_stream = "https://youtu.be/" . $matches[1];
754
+                            break;
755
+                        }
756
+                    } else if ($e->nodeName == "video") {
757
+                        $article_image = $e->getAttribute("poster");
758
+
759
+                        $src = $tmpxpath->query("//source[@src]", $e)->item(0);
760
+
761
+                        if ($src) {
762
+                            $article_stream = $src->getAttribute("src");
763
+                        }
764
+
765
+                        break;
766
+                    } else if ($e->nodeName == 'img') {
767
+                        if (mb_strpos($e->getAttribute("src"), "data:") !== 0) {
768
+                            $article_image = $e->getAttribute("src");
769
+                        }
770
+                        break;
771
+                    }
772
+                }
773
+            }
774
+
775
+            if (!$article_image)
776
+                foreach ($enclosures as $enc) {
777
+                    if (strpos($enc["content_type"], "image/") !== false) {
778
+                        $article_image = $enc["content_url"];
779
+                        break;
780
+                    }
781
+                }
782
+
783
+            if ($article_image)
784
+                $article_image = rewrite_relative_url($site_url, $article_image);
785
+
786
+            if ($article_stream)
787
+                $article_stream = rewrite_relative_url($site_url, $article_stream);
788
+        }
789
+
790
+        $cache = new DiskCache("images");
791
+
792
+        if ($article_image && $cache->exists(sha1($article_image)))
793
+            $article_image = $cache->getUrl(sha1($article_image));
794
+
795
+        if ($article_stream && $cache->exists(sha1($article_stream)))
796
+            $article_stream = $cache->getUrl(sha1($article_stream));
797
+
798
+        return [$article_image, $article_stream];
799
+    }
800 800
 
801 801
 }
Please login to merge, or discard this patch.
Braces   +90 added lines, -53 removed lines patch added patch discarded remove patch
@@ -57,10 +57,16 @@  discard block
 block discarded – undo
57 57
 
58 58
 		$rc = false;
59 59
 
60
-		if (!$title) $title = $url;
61
-		if (!$title && !$url) return false;
60
+		if (!$title) {
61
+		    $title = $url;
62
+		}
63
+		if (!$title && !$url) {
64
+		    return false;
65
+		}
62 66
 
63
-		if (filter_var($url, FILTER_VALIDATE_URL) === false) return false;
67
+		if (filter_var($url, FILTER_VALIDATE_URL) === false) {
68
+		    return false;
69
+		}
64 70
 
65 71
 		$pdo = Db::pdo();
66 72
 
@@ -271,7 +277,9 @@  discard block
 block discarded – undo
271 277
 		$tags_str = $this->format_tags_string($tags);
272 278
 		$tags_str_full = join(", ", $tags);
273 279
 
274
-		if (!$tags_str_full) $tags_str_full = __("no tags");
280
+		if (!$tags_str_full) {
281
+		    $tags_str_full = __("no tags");
282
+		}
275 283
 
276 284
 		print json_encode([
277 285
 			"id" => (int) $id,
@@ -320,10 +328,11 @@  discard block
 block discarded – undo
320 328
 
321 329
 			foreach ($ids as $id) {
322 330
 
323
-				if ($assign)
324
-					Labels::add_article($id, $label, $_SESSION["uid"]);
325
-				else
326
-					Labels::remove_article($id, $label, $_SESSION["uid"]);
331
+				if ($assign) {
332
+									Labels::add_article($id, $label, $_SESSION["uid"]);
333
+				} else {
334
+									Labels::remove_article($id, $label, $_SESSION["uid"]);
335
+				}
327 336
 
328 337
 				$labels = $this->get_article_labels($id, $_SESSION["uid"]);
329 338
 
@@ -384,14 +393,18 @@  discard block
 block discarded – undo
384 393
 				$width = $line["width"];
385 394
 				$height = $line["height"];
386 395
 
387
-				if (!$ctype) $ctype = __("unknown type");
396
+				if (!$ctype) {
397
+				    $ctype = __("unknown type");
398
+				}
388 399
 
389 400
 				//$filename = substr($url, strrpos($url, "/")+1);
390 401
 				$filename = basename($url);
391 402
 
392 403
 				$player = format_inline_player($url, $ctype);
393 404
 
394
-				if ($player) array_push($entries_inline, $player);
405
+				if ($player) {
406
+				    array_push($entries_inline, $player);
407
+				}
395 408
 
396 409
 #				$entry .= " <a target=\"_blank\" href=\"" . htmlspecialchars($url) . "\" rel=\"noopener noreferrer\">" .
397 410
 #					$filename . " (" . $ctype . ")" . "</a>";
@@ -419,8 +432,9 @@  discard block
 block discarded – undo
419 432
 
420 433
 					foreach ($entries as $entry) {
421 434
 
422
-						foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ENCLOSURE) as $plugin)
423
-							$retval = $plugin->hook_render_enclosure($entry, $hide_images);
435
+						foreach (PluginHost::getInstance()->get_hooks(PluginHost::HOOK_RENDER_ENCLOSURE) as $plugin) {
436
+													$retval = $plugin->hook_render_enclosure($entry, $hide_images);
437
+						}
424 438
 
425 439
 
426 440
 						if ($retval) {
@@ -431,10 +445,12 @@  discard block
 block discarded – undo
431 445
 
432 446
 								if (!$hide_images) {
433 447
 									$encsize = '';
434
-									if ($entry['height'] > 0)
435
-										$encsize .= ' height="' . intval($entry['height']) . '"';
436
-									if ($entry['width'] > 0)
437
-										$encsize .= ' width="' . intval($entry['width']) . '"';
448
+									if ($entry['height'] > 0) {
449
+																			$encsize .= ' height="' . intval($entry['height']) . '"';
450
+									}
451
+									if ($entry['width'] > 0) {
452
+																			$encsize .= ' width="' . intval($entry['width']) . '"';
453
+									}
438 454
 									$rv .= "<p><img
439 455
 										alt=\"".htmlspecialchars($entry["filename"])."\"
440 456
 										src=\"" .htmlspecialchars($entry["url"]) . "\"
@@ -466,15 +482,17 @@  discard block
 block discarded – undo
466 482
 			$rv .= "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
467 483
 
468 484
 			foreach ($entries as $entry) {
469
-				if ($entry["title"])
470
-					$title = " &mdash; " . truncate_string($entry["title"], 30);
471
-				else
472
-					$title = "";
485
+				if ($entry["title"]) {
486
+									$title = " &mdash; " . truncate_string($entry["title"], 30);
487
+				} else {
488
+									$title = "";
489
+				}
473 490
 
474
-				if ($entry["filename"])
475
-					$filename = truncate_middle(htmlspecialchars($entry["filename"]), 60);
476
-				else
477
-					$filename = "";
491
+				if ($entry["filename"]) {
492
+									$filename = truncate_middle(htmlspecialchars($entry["filename"]), 60);
493
+				} else {
494
+									$filename = "";
495
+				}
478 496
 
479 497
 				$rv .= "<div onclick='popupOpenUrl(\"".htmlspecialchars($entry["url"])."\")'
480 498
 					dojoType=\"dijit.MenuItem\">".$filename . $title."</div>";
@@ -492,7 +510,9 @@  discard block
 block discarded – undo
492 510
 
493 511
 		$a_id = $id;
494 512
 
495
-		if (!$owner_uid) $owner_uid = $_SESSION["uid"];
513
+		if (!$owner_uid) {
514
+		    $owner_uid = $_SESSION["uid"];
515
+		}
496 516
 
497 517
 		$pdo = Db::pdo();
498 518
 
@@ -510,7 +530,9 @@  discard block
 block discarded – undo
510 530
 				WHERE ref_id = ? AND owner_uid = ?");
511 531
 			$csth->execute([$id, $owner_uid]);
512 532
 
513
-			if ($row = $csth->fetch()) $tag_cache = $row["tag_cache"];
533
+			if ($row = $csth->fetch()) {
534
+			    $tag_cache = $row["tag_cache"];
535
+			}
514 536
 		}
515 537
 
516 538
 		if ($tag_cache) {
@@ -551,8 +573,9 @@  discard block
 block discarded – undo
551 573
 
552 574
 			$tags_str = mb_substr($tags_str, 0, mb_strlen($tags_str)-2);
553 575
 
554
-			if (count($tags) > $maxtags)
555
-				$tags_str .= ", &hellip;";
576
+			if (count($tags) > $maxtags) {
577
+							$tags_str .= ", &hellip;";
578
+			}
556 579
 
557 580
 			return $tags_str;
558 581
 		}
@@ -560,7 +583,9 @@  discard block
 block discarded – undo
560 583
 
561 584
 	public static function format_article_labels($labels) {
562 585
 
563
-		if (!is_array($labels)) return '';
586
+		if (!is_array($labels)) {
587
+		    return '';
588
+		}
564 589
 
565 590
 		$labels_str = "";
566 591
 
@@ -618,10 +643,11 @@  discard block
 block discarded – undo
618 643
 
619 644
         // purge orphaned posts in main content table
620 645
 
621
-        if (DB_TYPE == "mysql")
622
-            $limit_qpart = "LIMIT 5000";
623
-        else
624
-            $limit_qpart = "";
646
+        if (DB_TYPE == "mysql") {
647
+                    $limit_qpart = "LIMIT 5000";
648
+        } else {
649
+                    $limit_qpart = "";
650
+        }
625 651
 
626 652
         $pdo = Db::pdo();
627 653
         $res = $pdo->query("DELETE FROM ttrss_entries WHERE
@@ -635,7 +661,9 @@  discard block
 block discarded – undo
635 661
 
636 662
 	public static function catchupArticlesById($ids, $cmode, $owner_uid = false) {
637 663
 
638
-		if (!$owner_uid) $owner_uid = $_SESSION["uid"];
664
+		if (!$owner_uid) {
665
+		    $owner_uid = $_SESSION["uid"];
666
+		}
639 667
 
640 668
 		$pdo = Db::pdo();
641 669
 
@@ -685,7 +713,9 @@  discard block
 block discarded – undo
685 713
 	public static function get_article_labels($id, $owner_uid = false) {
686 714
 		$rv = array();
687 715
 
688
-		if (!$owner_uid) $owner_uid = $_SESSION["uid"];
716
+		if (!$owner_uid) {
717
+		    $owner_uid = $_SESSION["uid"];
718
+		}
689 719
 
690 720
 		$pdo = Db::pdo();
691 721
 
@@ -699,10 +729,11 @@  discard block
 block discarded – undo
699 729
 			if ($label_cache) {
700 730
 				$tmp = json_decode($label_cache, true);
701 731
 
702
-				if (!$tmp || $tmp["no-labels"] == 1)
703
-					return $rv;
704
-				else
705
-					return $tmp;
732
+				if (!$tmp || $tmp["no-labels"] == 1) {
733
+									return $rv;
734
+				} else {
735
+									return $tmp;
736
+				}
706 737
 			}
707 738
 		}
708 739
 
@@ -721,10 +752,11 @@  discard block
 block discarded – undo
721 752
 			array_push($rv, $rk);
722 753
 		}
723 754
 
724
-		if (count($rv) > 0)
725
-			Labels::update_cache($owner_uid, $id, $rv);
726
-		else
727
-			Labels::update_cache($owner_uid, $id, array("no-labels" => 1));
755
+		if (count($rv) > 0) {
756
+					Labels::update_cache($owner_uid, $id, $rv);
757
+		} else {
758
+					Labels::update_cache($owner_uid, $id, array("no-labels" => 1));
759
+		}
728 760
 
729 761
 		return $rv;
730 762
 	}
@@ -772,28 +804,33 @@  discard block
 block discarded – undo
772 804
 				}
773 805
 			}
774 806
 
775
-			if (!$article_image)
776
-				foreach ($enclosures as $enc) {
807
+			if (!$article_image) {
808
+							foreach ($enclosures as $enc) {
777 809
 					if (strpos($enc["content_type"], "image/") !== false) {
778 810
 						$article_image = $enc["content_url"];
811
+			}
779 812
 						break;
780 813
 					}
781 814
 				}
782 815
 
783
-			if ($article_image)
784
-				$article_image = rewrite_relative_url($site_url, $article_image);
816
+			if ($article_image) {
817
+							$article_image = rewrite_relative_url($site_url, $article_image);
818
+			}
785 819
 
786
-			if ($article_stream)
787
-				$article_stream = rewrite_relative_url($site_url, $article_stream);
820
+			if ($article_stream) {
821
+							$article_stream = rewrite_relative_url($site_url, $article_stream);
822
+			}
788 823
 		}
789 824
 
790 825
 		$cache = new DiskCache("images");
791 826
 
792
-		if ($article_image && $cache->exists(sha1($article_image)))
793
-			$article_image = $cache->getUrl(sha1($article_image));
827
+		if ($article_image && $cache->exists(sha1($article_image))) {
828
+					$article_image = $cache->getUrl(sha1($article_image));
829
+		}
794 830
 
795
-		if ($article_stream && $cache->exists(sha1($article_stream)))
796
-			$article_stream = $cache->getUrl(sha1($article_stream));
831
+		if ($article_stream && $cache->exists(sha1($article_stream))) {
832
+					$article_stream = $cache->getUrl(sha1($article_stream));
833
+		}
797 834
 
798 835
 		return [$article_image, $article_stream];
799 836
 	}
Please login to merge, or discard this patch.
classes/diskcache.php 1 patch
Indentation   +148 added lines, -148 removed lines patch added patch discarded remove patch
@@ -1,151 +1,151 @@
 block discarded – undo
1 1
 <?php
2 2
 class DiskCache {
3
-	private $dir;
4
-
5
-	public function __construct($dir) {
6
-		$this->dir = CACHE_DIR . "/" . clean_filename($dir);
7
-	}
8
-
9
-	public function getDir() {
10
-		return $this->dir;
11
-	}
12
-
13
-	public function makeDir() {
14
-		if (!is_dir($this->dir)) {
15
-			return mkdir($this->dir);
16
-		}
17
-	}
18
-
19
-	public function isWritable($filename = "") {
20
-		if ($filename) {
21
-			if (file_exists($this->getFullPath($filename)))
22
-				return is_writable($this->getFullPath($filename));
23
-			else
24
-				return is_writable($this->dir);
25
-		} else {
26
-			return is_writable($this->dir);
27
-		}
28
-	}
29
-
30
-	public function exists($filename) {
31
-		return file_exists($this->getFullPath($filename));
32
-	}
33
-
34
-	public function getSize($filename) {
35
-		if ($this->exists($filename))
36
-			return filesize($this->getFullPath($filename));
37
-		else
38
-			return -1;
39
-	}
40
-
41
-	public function getFullPath($filename) {
42
-		$filename = clean_filename($filename);
43
-
44
-		return $this->dir . "/" . $filename;
45
-	}
46
-
47
-	public function put($filename, $data) {
48
-		return file_put_contents($this->getFullPath($filename), $data);
49
-	}
50
-
51
-	public function touch($filename) {
52
-		return touch($this->getFullPath($filename));
53
-	}
54
-
55
-	public function get($filename) {
56
-		if ($this->exists($filename))
57
-			return file_get_contents($this->getFullPath($filename));
58
-		else
59
-			return null;
60
-	}
61
-
62
-	public function getMimeType($filename) {
63
-		if ($this->exists($filename))
64
-			return mime_content_type($this->getFullPath($filename));
65
-		else
66
-			return null;
67
-	}
68
-
69
-	public function send($filename) {
70
-		header("Content-Disposition: inline; filename=\"$filename\"");
71
-
72
-		return send_local_file($this->getFullPath($filename));
73
-	}
74
-
75
-	public function getUrl($filename) {
76
-		return get_self_url_prefix() . "/public.php?op=cached_url&file=" . basename($this->dir) . "/" . $filename;
77
-	}
78
-
79
-	// check for locally cached (media) URLs and rewrite to local versions
80
-	// this is called separately after sanitize() and plugin render article hooks to allow
81
-	// plugins work on original source URLs used before caching
82
-	static public function rewriteUrls($str)
83
-	{
84
-		$res = trim($str);
85
-		if (!$res) return '';
86
-
87
-		$doc = new DOMDocument();
88
-		if ($doc->loadHTML('<?xml encoding="UTF-8">' . $res)) {
89
-			$xpath = new DOMXPath($doc);
90
-			$cache = new DiskCache("images");
91
-
92
-			$entries = $xpath->query('(//img[@src]|//picture/source[@src]|//video[@poster]|//video/source[@src]|//audio/source[@src])');
93
-
94
-			$need_saving = false;
95
-
96
-			foreach ($entries as $entry) {
97
-
98
-				if ($entry->hasAttribute('src') || $entry->hasAttribute('poster')) {
99
-
100
-					// should be already absolutized because this is called after sanitize()
101
-					$src = $entry->hasAttribute('poster') ? $entry->getAttribute('poster') : $entry->getAttribute('src');
102
-					$cached_filename = sha1($src);
103
-
104
-					if ($cache->exists($cached_filename)) {
105
-
106
-						$src = $cache->getUrl(sha1($src));
107
-
108
-						if ($entry->hasAttribute('poster'))
109
-							$entry->setAttribute('poster', $src);
110
-						else {
111
-							$entry->setAttribute('src', $src);
112
-							$entry->removeAttribute("srcset");
113
-						}
114
-
115
-						$need_saving = true;
116
-					}
117
-				}
118
-			}
119
-
120
-			if ($need_saving) {
121
-				$doc->removeChild($doc->firstChild); //remove doctype
122
-				$res = $doc->saveHTML();
123
-			}
124
-		}
125
-		return $res;
126
-	}
127
-
128
-	public static function expire() {
129
-		$dirs = array_filter(glob(CACHE_DIR . "/*"), "is_dir");
130
-
131
-		foreach ($dirs as $cache_dir) {
132
-			$num_deleted = 0;
133
-
134
-			if (is_writable($cache_dir) && !file_exists("$cache_dir/.no-auto-expiry")) {
135
-				$files = glob("$cache_dir/*");
136
-
137
-				if ($files) {
138
-					foreach ($files as $file) {
139
-						if (time() - filemtime($file) > 86400*CACHE_MAX_DAYS) {
140
-							unlink($file);
141
-
142
-							++$num_deleted;
143
-						}
144
-					}
145
-				}
146
-
147
-				Debug::log("expired $cache_dir: removed $num_deleted files.");
148
-			}
149
-		}
150
-	}
3
+    private $dir;
4
+
5
+    public function __construct($dir) {
6
+        $this->dir = CACHE_DIR . "/" . clean_filename($dir);
7
+    }
8
+
9
+    public function getDir() {
10
+        return $this->dir;
11
+    }
12
+
13
+    public function makeDir() {
14
+        if (!is_dir($this->dir)) {
15
+            return mkdir($this->dir);
16
+        }
17
+    }
18
+
19
+    public function isWritable($filename = "") {
20
+        if ($filename) {
21
+            if (file_exists($this->getFullPath($filename)))
22
+                return is_writable($this->getFullPath($filename));
23
+            else
24
+                return is_writable($this->dir);
25
+        } else {
26
+            return is_writable($this->dir);
27
+        }
28
+    }
29
+
30
+    public function exists($filename) {
31
+        return file_exists($this->getFullPath($filename));
32
+    }
33
+
34
+    public function getSize($filename) {
35
+        if ($this->exists($filename))
36
+            return filesize($this->getFullPath($filename));
37
+        else
38
+            return -1;
39
+    }
40
+
41
+    public function getFullPath($filename) {
42
+        $filename = clean_filename($filename);
43
+
44
+        return $this->dir . "/" . $filename;
45
+    }
46
+
47
+    public function put($filename, $data) {
48
+        return file_put_contents($this->getFullPath($filename), $data);
49
+    }
50
+
51
+    public function touch($filename) {
52
+        return touch($this->getFullPath($filename));
53
+    }
54
+
55
+    public function get($filename) {
56
+        if ($this->exists($filename))
57
+            return file_get_contents($this->getFullPath($filename));
58
+        else
59
+            return null;
60
+    }
61
+
62
+    public function getMimeType($filename) {
63
+        if ($this->exists($filename))
64
+            return mime_content_type($this->getFullPath($filename));
65
+        else
66
+            return null;
67
+    }
68
+
69
+    public function send($filename) {
70
+        header("Content-Disposition: inline; filename=\"$filename\"");
71
+
72
+        return send_local_file($this->getFullPath($filename));
73
+    }
74
+
75
+    public function getUrl($filename) {
76
+        return get_self_url_prefix() . "/public.php?op=cached_url&file=" . basename($this->dir) . "/" . $filename;
77
+    }
78
+
79
+    // check for locally cached (media) URLs and rewrite to local versions
80
+    // this is called separately after sanitize() and plugin render article hooks to allow
81
+    // plugins work on original source URLs used before caching
82
+    static public function rewriteUrls($str)
83
+    {
84
+        $res = trim($str);
85
+        if (!$res) return '';
86
+
87
+        $doc = new DOMDocument();
88
+        if ($doc->loadHTML('<?xml encoding="UTF-8">' . $res)) {
89
+            $xpath = new DOMXPath($doc);
90
+            $cache = new DiskCache("images");
91
+
92
+            $entries = $xpath->query('(//img[@src]|//picture/source[@src]|//video[@poster]|//video/source[@src]|//audio/source[@src])');
93
+
94
+            $need_saving = false;
95
+
96
+            foreach ($entries as $entry) {
97
+
98
+                if ($entry->hasAttribute('src') || $entry->hasAttribute('poster')) {
99
+
100
+                    // should be already absolutized because this is called after sanitize()
101
+                    $src = $entry->hasAttribute('poster') ? $entry->getAttribute('poster') : $entry->getAttribute('src');
102
+                    $cached_filename = sha1($src);
103
+
104
+                    if ($cache->exists($cached_filename)) {
105
+
106
+                        $src = $cache->getUrl(sha1($src));
107
+
108
+                        if ($entry->hasAttribute('poster'))
109
+                            $entry->setAttribute('poster', $src);
110
+                        else {
111
+                            $entry->setAttribute('src', $src);
112
+                            $entry->removeAttribute("srcset");
113
+                        }
114
+
115
+                        $need_saving = true;
116
+                    }
117
+                }
118
+            }
119
+
120
+            if ($need_saving) {
121
+                $doc->removeChild($doc->firstChild); //remove doctype
122
+                $res = $doc->saveHTML();
123
+            }
124
+        }
125
+        return $res;
126
+    }
127
+
128
+    public static function expire() {
129
+        $dirs = array_filter(glob(CACHE_DIR . "/*"), "is_dir");
130
+
131
+        foreach ($dirs as $cache_dir) {
132
+            $num_deleted = 0;
133
+
134
+            if (is_writable($cache_dir) && !file_exists("$cache_dir/.no-auto-expiry")) {
135
+                $files = glob("$cache_dir/*");
136
+
137
+                if ($files) {
138
+                    foreach ($files as $file) {
139
+                        if (time() - filemtime($file) > 86400*CACHE_MAX_DAYS) {
140
+                            unlink($file);
141
+
142
+                            ++$num_deleted;
143
+                        }
144
+                    }
145
+                }
146
+
147
+                Debug::log("expired $cache_dir: removed $num_deleted files.");
148
+            }
149
+        }
150
+    }
151 151
 }
Please login to merge, or discard this patch.
plugins/af_readability/init.php 2 patches
Indentation   +188 added lines, -188 removed lines patch added patch discarded remove patch
@@ -4,65 +4,65 @@  discard block
 block discarded – undo
4 4
 
5 5
 class Af_Readability extends Plugin {
6 6
 
7
-	/* @var PluginHost $host */
8
-	private $host;
7
+    /* @var PluginHost $host */
8
+    private $host;
9 9
 
10
-	public function about() {
11
-		return array(1.0,
12
-			"Try to inline article content using Readability",
13
-			"fox");
14
-	}
10
+    public function about() {
11
+        return array(1.0,
12
+            "Try to inline article content using Readability",
13
+            "fox");
14
+    }
15 15
 
16
-	public function flags() {
17
-		return array("needs_curl" => true);
18
-	}
16
+    public function flags() {
17
+        return array("needs_curl" => true);
18
+    }
19 19
 
20
-	public function save() {
21
-		$enable_share_anything = checkbox_to_sql_bool($_POST["enable_share_anything"]);
20
+    public function save() {
21
+        $enable_share_anything = checkbox_to_sql_bool($_POST["enable_share_anything"]);
22 22
 
23
-		$this->host->set($this, "enable_share_anything", $enable_share_anything);
23
+        $this->host->set($this, "enable_share_anything", $enable_share_anything);
24 24
 
25
-		echo __("Data saved.");
26
-	}
25
+        echo __("Data saved.");
26
+    }
27 27
 
28
-	public function init($host)
29
-	{
30
-		$this->host = $host;
28
+    public function init($host)
29
+    {
30
+        $this->host = $host;
31 31
 
32
-		if (version_compare(PHP_VERSION, '7.0.0', '<')) {
33
-			user_error("af_readability requires PHP 7.0", E_USER_WARNING);
34
-			return;
35
-		}
32
+        if (version_compare(PHP_VERSION, '7.0.0', '<')) {
33
+            user_error("af_readability requires PHP 7.0", E_USER_WARNING);
34
+            return;
35
+        }
36 36
 
37
-		$host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
38
-		$host->add_hook($host::HOOK_PREFS_TAB, $this);
39
-		$host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
40
-		$host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
37
+        $host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
38
+        $host->add_hook($host::HOOK_PREFS_TAB, $this);
39
+        $host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
40
+        $host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
41 41
 
42
-		// Note: we have to install the hook even if disabled because init() is being run before plugin data has loaded
43
-		// so we can't check for our storage-set options here
44
-		$host->add_hook($host::HOOK_GET_FULL_TEXT, $this);
42
+        // Note: we have to install the hook even if disabled because init() is being run before plugin data has loaded
43
+        // so we can't check for our storage-set options here
44
+        $host->add_hook($host::HOOK_GET_FULL_TEXT, $this);
45 45
 
46
-		$host->add_filter_action($this, "action_inline", __("Inline content"));
47
-	}
46
+        $host->add_filter_action($this, "action_inline", __("Inline content"));
47
+    }
48 48
 
49
-	public function hook_prefs_tab($args) {
50
-		if ($args != "prefFeeds") return;
49
+    public function hook_prefs_tab($args) {
50
+        if ($args != "prefFeeds") return;
51 51
 
52
-		print "<div dojoType='dijit.layout.AccordionPane'
52
+        print "<div dojoType='dijit.layout.AccordionPane'
53 53
 			title=\"<i class='material-icons'>extension</i> ".__('Readability settings (af_readability)')."\">";
54 54
 
55
-		if (version_compare(PHP_VERSION, '7.0.0', '<')) {
56
-			print_error("This plugin requires PHP 7.0.");
57
-		} else {
55
+        if (version_compare(PHP_VERSION, '7.0.0', '<')) {
56
+            print_error("This plugin requires PHP 7.0.");
57
+        } else {
58 58
 
59
-			print "<h2>" . __("Global settings") . "</h2>";
59
+            print "<h2>" . __("Global settings") . "</h2>";
60 60
 
61
-			print_notice("Enable for specific feeds in the feed editor.");
61
+            print_notice("Enable for specific feeds in the feed editor.");
62 62
 
63
-			print "<form dojoType='dijit.form.Form'>";
63
+            print "<form dojoType='dijit.form.Form'>";
64 64
 
65
-			print "<script type='dojo/method' event='onSubmit' args='evt'>
65
+            print "<script type='dojo/method' event='onSubmit' args='evt'>
66 66
 			evt.preventDefault();
67 67
 			if (this.validate()) {
68 68
 				console.log(dojo.objectToQuery(this.getValues()));
@@ -76,212 +76,212 @@  discard block
 block discarded – undo
76 76
 			}
77 77
 			</script>";
78 78
 
79
-			print_hidden("op", "pluginhandler");
80
-			print_hidden("method", "save");
81
-			print_hidden("plugin", "af_readability");
79
+            print_hidden("op", "pluginhandler");
80
+            print_hidden("method", "save");
81
+            print_hidden("plugin", "af_readability");
82 82
 
83
-			$enable_share_anything = $this->host->get($this, "enable_share_anything");
83
+            $enable_share_anything = $this->host->get($this, "enable_share_anything");
84 84
 
85
-			print "<fieldset>";
86
-			print "<label class='checkbox'> ";
87
-			print_checkbox("enable_share_anything", $enable_share_anything);
88
-			print " " . __("Provide full-text services to core code (bookmarklets) and other plugins");
89
-			print "</label>";
90
-			print "</fieldset>";
85
+            print "<fieldset>";
86
+            print "<label class='checkbox'> ";
87
+            print_checkbox("enable_share_anything", $enable_share_anything);
88
+            print " " . __("Provide full-text services to core code (bookmarklets) and other plugins");
89
+            print "</label>";
90
+            print "</fieldset>";
91 91
 
92
-			print_button("submit", __("Save"), "class='alt-primary'");
93
-			print "</form>";
92
+            print_button("submit", __("Save"), "class='alt-primary'");
93
+            print "</form>";
94 94
 
95
-			$enabled_feeds = $this->host->get($this, "enabled_feeds");
96
-			if (!is_array($enabled_feeds)) $enabled_feeds = array();
95
+            $enabled_feeds = $this->host->get($this, "enabled_feeds");
96
+            if (!is_array($enabled_feeds)) $enabled_feeds = array();
97 97
 
98
-			$enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
99
-			$this->host->set($this, "enabled_feeds", $enabled_feeds);
98
+            $enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
99
+            $this->host->set($this, "enabled_feeds", $enabled_feeds);
100 100
 
101
-			if (count($enabled_feeds) > 0) {
102
-				print "<h3>" . __("Currently enabled for (click to edit):") . "</h3>";
101
+            if (count($enabled_feeds) > 0) {
102
+                print "<h3>" . __("Currently enabled for (click to edit):") . "</h3>";
103 103
 
104
-				print "<ul class='panel panel-scrollable list list-unstyled'>";
105
-				foreach ($enabled_feeds as $f) {
106
-					print "<li><i class='material-icons'>rss_feed</i> <a href='#'
104
+                print "<ul class='panel panel-scrollable list list-unstyled'>";
105
+                foreach ($enabled_feeds as $f) {
106
+                    print "<li><i class='material-icons'>rss_feed</i> <a href='#'
107 107
 						onclick='CommonDialogs.editFeed($f)'>".
108
-						Feeds::getFeedTitle($f) . "</a></li>";
109
-				}
110
-				print "</ul>";
111
-			}
108
+                        Feeds::getFeedTitle($f) . "</a></li>";
109
+                }
110
+                print "</ul>";
111
+            }
112 112
 
113
-		}
113
+        }
114 114
 
115
-		print "</div>";
116
-	}
115
+        print "</div>";
116
+    }
117 117
 
118
-	public function hook_prefs_edit_feed($feed_id) {
119
-		print "<header>".__("Readability")."</header>";
120
-		print "<section>";
118
+    public function hook_prefs_edit_feed($feed_id) {
119
+        print "<header>".__("Readability")."</header>";
120
+        print "<section>";
121 121
 
122
-		$enabled_feeds = $this->host->get($this, "enabled_feeds");
123
-		if (!is_array($enabled_feeds)) $enabled_feeds = array();
122
+        $enabled_feeds = $this->host->get($this, "enabled_feeds");
123
+        if (!is_array($enabled_feeds)) $enabled_feeds = array();
124 124
 
125
-		$key = array_search($feed_id, $enabled_feeds);
126
-		$checked = $key !== false ? "checked" : "";
125
+        $key = array_search($feed_id, $enabled_feeds);
126
+        $checked = $key !== false ? "checked" : "";
127 127
 
128
-		print "<fieldset>";
128
+        print "<fieldset>";
129 129
 
130
-		print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='af_readability_enabled'
130
+        print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='af_readability_enabled'
131 131
 			name='af_readability_enabled' $checked>&nbsp;".__('Inline article content')."</label>";
132 132
 
133
-		print "</fieldset>";
133
+        print "</fieldset>";
134 134
 
135
-		print "</section>";
136
-	}
135
+        print "</section>";
136
+    }
137 137
 
138
-	public function hook_prefs_save_feed($feed_id) {
139
-		$enabled_feeds = $this->host->get($this, "enabled_feeds");
140
-		if (!is_array($enabled_feeds)) $enabled_feeds = array();
138
+    public function hook_prefs_save_feed($feed_id) {
139
+        $enabled_feeds = $this->host->get($this, "enabled_feeds");
140
+        if (!is_array($enabled_feeds)) $enabled_feeds = array();
141 141
 
142
-		$enable = checkbox_to_sql_bool($_POST["af_readability_enabled"]);
143
-		$key = array_search($feed_id, $enabled_feeds);
142
+        $enable = checkbox_to_sql_bool($_POST["af_readability_enabled"]);
143
+        $key = array_search($feed_id, $enabled_feeds);
144 144
 
145
-		if ($enable) {
146
-			if ($key === false) {
147
-				array_push($enabled_feeds, $feed_id);
148
-			}
149
-		} else {
150
-			if ($key !== false) {
151
-				unset($enabled_feeds[$key]);
152
-			}
153
-		}
145
+        if ($enable) {
146
+            if ($key === false) {
147
+                array_push($enabled_feeds, $feed_id);
148
+            }
149
+        } else {
150
+            if ($key !== false) {
151
+                unset($enabled_feeds[$key]);
152
+            }
153
+        }
154 154
 
155
-		$this->host->set($this, "enabled_feeds", $enabled_feeds);
156
-	}
155
+        $this->host->set($this, "enabled_feeds", $enabled_feeds);
156
+    }
157 157
 
158
-	/**
159
-	 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
160
-	 */
161
-	public function hook_article_filter_action($article, $action) {
162
-		return $this->process_article($article);
163
-	}
158
+    /**
159
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
160
+     */
161
+    public function hook_article_filter_action($article, $action) {
162
+        return $this->process_article($article);
163
+    }
164 164
 
165
-	public function extract_content($url) {
165
+    public function extract_content($url) {
166 166
 
167
-		global $fetch_effective_url;
167
+        global $fetch_effective_url;
168 168
 
169
-		$tmp = fetch_file_contents([
170
-			"url" => $url,
171
-			"http_accept" => "text/*",
172
-			"type" => "text/html"]);
169
+        $tmp = fetch_file_contents([
170
+            "url" => $url,
171
+            "http_accept" => "text/*",
172
+            "type" => "text/html"]);
173 173
 
174
-		if ($tmp && mb_strlen($tmp) < 1024 * 500) {
175
-			$tmpdoc = new DOMDocument("1.0", "UTF-8");
174
+        if ($tmp && mb_strlen($tmp) < 1024 * 500) {
175
+            $tmpdoc = new DOMDocument("1.0", "UTF-8");
176 176
 
177
-			if (!@$tmpdoc->loadHTML($tmp))
178
-				return false;
177
+            if (!@$tmpdoc->loadHTML($tmp))
178
+                return false;
179 179
 
180
-			// this is the worst hack yet :(
181
-			if (strtolower($tmpdoc->encoding) != 'utf-8') {
182
-				$tmp = preg_replace("/<meta.*?charset.*?\/?>/i", "", $tmp);
183
-				if (empty($tmpdoc->encoding)) {
184
-					$tmp = mb_convert_encoding($tmp, 'utf-8');
185
-				} else {
186
-					$tmp = mb_convert_encoding($tmp, 'utf-8', $tmpdoc->encoding);
187
-				}
188
-			}
180
+            // this is the worst hack yet :(
181
+            if (strtolower($tmpdoc->encoding) != 'utf-8') {
182
+                $tmp = preg_replace("/<meta.*?charset.*?\/?>/i", "", $tmp);
183
+                if (empty($tmpdoc->encoding)) {
184
+                    $tmp = mb_convert_encoding($tmp, 'utf-8');
185
+                } else {
186
+                    $tmp = mb_convert_encoding($tmp, 'utf-8', $tmpdoc->encoding);
187
+                }
188
+            }
189 189
 
190
-			try {
191
-				$r = new Readability(new Configuration());
190
+            try {
191
+                $r = new Readability(new Configuration());
192 192
 
193
-				if ($r->parse($tmp)) {
193
+                if ($r->parse($tmp)) {
194 194
 
195
-					$tmpxpath = new DOMXPath($r->getDOMDOcument());
196
-					$entries = $tmpxpath->query('(//a[@href]|//img[@src])');
195
+                    $tmpxpath = new DOMXPath($r->getDOMDOcument());
196
+                    $entries = $tmpxpath->query('(//a[@href]|//img[@src])');
197 197
 
198
-					foreach ($entries as $entry) {
199
-						if ($entry->hasAttribute("href")) {
200
-							$entry->setAttribute("href",
201
-									rewrite_relative_url($fetch_effective_url, $entry->getAttribute("href")));
198
+                    foreach ($entries as $entry) {
199
+                        if ($entry->hasAttribute("href")) {
200
+                            $entry->setAttribute("href",
201
+                                    rewrite_relative_url($fetch_effective_url, $entry->getAttribute("href")));
202 202
 
203
-						}
203
+                        }
204 204
 
205
-						if ($entry->hasAttribute("src")) {
206
-							$entry->setAttribute("src",
207
-									rewrite_relative_url($fetch_effective_url, $entry->getAttribute("src")));
205
+                        if ($entry->hasAttribute("src")) {
206
+                            $entry->setAttribute("src",
207
+                                    rewrite_relative_url($fetch_effective_url, $entry->getAttribute("src")));
208 208
 
209
-						}
210
-					}
209
+                        }
210
+                    }
211 211
 
212
-					return $r->getContent();
213
-				}
212
+                    return $r->getContent();
213
+                }
214 214
 
215
-			} catch (Exception $e) {
216
-				return false;
217
-			}
218
-		}
215
+            } catch (Exception $e) {
216
+                return false;
217
+            }
218
+        }
219 219
 
220
-		return false;
221
-	}
220
+        return false;
221
+    }
222 222
 
223
-	public function process_article($article) {
223
+    public function process_article($article) {
224 224
 
225
-		$extracted_content = $this->extract_content($article["link"]);
225
+        $extracted_content = $this->extract_content($article["link"]);
226 226
 
227
-		# let's see if there's anything of value in there
228
-		$content_test = trim(strip_tags(sanitize($extracted_content)));
227
+        # let's see if there's anything of value in there
228
+        $content_test = trim(strip_tags(sanitize($extracted_content)));
229 229
 
230
-		if ($content_test) {
231
-			$article["content"] = $extracted_content;
232
-		}
230
+        if ($content_test) {
231
+            $article["content"] = $extracted_content;
232
+        }
233 233
 
234
-		return $article;
235
-	}
234
+        return $article;
235
+    }
236 236
 
237
-	public function hook_article_filter($article) {
237
+    public function hook_article_filter($article) {
238 238
 
239
-		$enabled_feeds = $this->host->get($this, "enabled_feeds");
240
-		if (!is_array($enabled_feeds)) return $article;
239
+        $enabled_feeds = $this->host->get($this, "enabled_feeds");
240
+        if (!is_array($enabled_feeds)) return $article;
241 241
 
242
-		$key = array_search($article["feed"]["id"], $enabled_feeds);
243
-		if ($key === false) return $article;
242
+        $key = array_search($article["feed"]["id"], $enabled_feeds);
243
+        if ($key === false) return $article;
244 244
 
245
-		return $this->process_article($article);
245
+        return $this->process_article($article);
246 246
 
247
-	}
247
+    }
248 248
 
249
-	public function hook_get_full_text($link)
250
-	{
251
-		$enable_share_anything = $this->host->get($this, "enable_share_anything");
249
+    public function hook_get_full_text($link)
250
+    {
251
+        $enable_share_anything = $this->host->get($this, "enable_share_anything");
252 252
 
253
-		if ($enable_share_anything) {
254
-			$extracted_content = $this->extract_content($link);
253
+        if ($enable_share_anything) {
254
+            $extracted_content = $this->extract_content($link);
255 255
 
256
-			# let's see if there's anything of value in there
257
-			$content_test = trim(strip_tags(sanitize($extracted_content)));
256
+            # let's see if there's anything of value in there
257
+            $content_test = trim(strip_tags(sanitize($extracted_content)));
258 258
 
259
-			if ($content_test) {
260
-				return $extracted_content;
261
-			}
262
-		}
259
+            if ($content_test) {
260
+                return $extracted_content;
261
+            }
262
+        }
263 263
 
264
-		return false;
265
-	}
264
+        return false;
265
+    }
266 266
 
267
-	public function api_version() {
268
-		return 2;
269
-	}
267
+    public function api_version() {
268
+        return 2;
269
+    }
270 270
 
271
-	private function filter_unknown_feeds($enabled_feeds) {
272
-		$tmp = array();
271
+    private function filter_unknown_feeds($enabled_feeds) {
272
+        $tmp = array();
273 273
 
274
-		foreach ($enabled_feeds as $feed) {
274
+        foreach ($enabled_feeds as $feed) {
275 275
 
276
-			$sth = $this->pdo->prepare("SELECT id FROM ttrss_feeds WHERE id = ? AND owner_uid = ?");
277
-			$sth->execute([$feed, $_SESSION['uid']]);
276
+            $sth = $this->pdo->prepare("SELECT id FROM ttrss_feeds WHERE id = ? AND owner_uid = ?");
277
+            $sth->execute([$feed, $_SESSION['uid']]);
278 278
 
279
-			if ($row = $sth->fetch()) {
280
-				array_push($tmp, $feed);
281
-			}
282
-		}
279
+            if ($row = $sth->fetch()) {
280
+                array_push($tmp, $feed);
281
+            }
282
+        }
283 283
 
284
-		return $tmp;
285
-	}
284
+        return $tmp;
285
+    }
286 286
 
287 287
 }
Please login to merge, or discard this patch.
Braces   +21 added lines, -8 removed lines patch added patch discarded remove patch
@@ -47,7 +47,9 @@  discard block
 block discarded – undo
47 47
 	}
48 48
 
49 49
 	public function hook_prefs_tab($args) {
50
-		if ($args != "prefFeeds") return;
50
+		if ($args != "prefFeeds") {
51
+		    return;
52
+		}
51 53
 
52 54
 		print "<div dojoType='dijit.layout.AccordionPane'
53 55
 			title=\"<i class='material-icons'>extension</i> ".__('Readability settings (af_readability)')."\">";
@@ -93,7 +95,9 @@  discard block
 block discarded – undo
93 95
 			print "</form>";
94 96
 
95 97
 			$enabled_feeds = $this->host->get($this, "enabled_feeds");
96
-			if (!is_array($enabled_feeds)) $enabled_feeds = array();
98
+			if (!is_array($enabled_feeds)) {
99
+			    $enabled_feeds = array();
100
+			}
97 101
 
98 102
 			$enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
99 103
 			$this->host->set($this, "enabled_feeds", $enabled_feeds);
@@ -120,7 +124,9 @@  discard block
 block discarded – undo
120 124
 		print "<section>";
121 125
 
122 126
 		$enabled_feeds = $this->host->get($this, "enabled_feeds");
123
-		if (!is_array($enabled_feeds)) $enabled_feeds = array();
127
+		if (!is_array($enabled_feeds)) {
128
+		    $enabled_feeds = array();
129
+		}
124 130
 
125 131
 		$key = array_search($feed_id, $enabled_feeds);
126 132
 		$checked = $key !== false ? "checked" : "";
@@ -137,7 +143,9 @@  discard block
 block discarded – undo
137 143
 
138 144
 	public function hook_prefs_save_feed($feed_id) {
139 145
 		$enabled_feeds = $this->host->get($this, "enabled_feeds");
140
-		if (!is_array($enabled_feeds)) $enabled_feeds = array();
146
+		if (!is_array($enabled_feeds)) {
147
+		    $enabled_feeds = array();
148
+		}
141 149
 
142 150
 		$enable = checkbox_to_sql_bool($_POST["af_readability_enabled"]);
143 151
 		$key = array_search($feed_id, $enabled_feeds);
@@ -174,8 +182,9 @@  discard block
 block discarded – undo
174 182
 		if ($tmp && mb_strlen($tmp) < 1024 * 500) {
175 183
 			$tmpdoc = new DOMDocument("1.0", "UTF-8");
176 184
 
177
-			if (!@$tmpdoc->loadHTML($tmp))
178
-				return false;
185
+			if (!@$tmpdoc->loadHTML($tmp)) {
186
+							return false;
187
+			}
179 188
 
180 189
 			// this is the worst hack yet :(
181 190
 			if (strtolower($tmpdoc->encoding) != 'utf-8') {
@@ -237,10 +246,14 @@  discard block
 block discarded – undo
237 246
 	public function hook_article_filter($article) {
238 247
 
239 248
 		$enabled_feeds = $this->host->get($this, "enabled_feeds");
240
-		if (!is_array($enabled_feeds)) return $article;
249
+		if (!is_array($enabled_feeds)) {
250
+		    return $article;
251
+		}
241 252
 
242 253
 		$key = array_search($article["feed"]["id"], $enabled_feeds);
243
-		if ($key === false) return $article;
254
+		if ($key === false) {
255
+		    return $article;
256
+		}
244 257
 
245 258
 		return $this->process_article($article);
246 259
 
Please login to merge, or discard this patch.
plugins/af_psql_trgm/init.php 2 patches
Indentation   +201 added lines, -201 removed lines patch added patch discarded remove patch
@@ -1,64 +1,64 @@  discard block
 block discarded – undo
1 1
 <?php
2 2
 class Af_Psql_Trgm extends Plugin {
3 3
 
4
-	/* @var PluginHost $host */
5
-	private $host;
4
+    /* @var PluginHost $host */
5
+    private $host;
6 6
 
7
-	public function about() {
8
-		return array(1.0,
9
-			"Marks similar articles as read (requires pg_trgm)",
10
-			"fox");
11
-	}
7
+    public function about() {
8
+        return array(1.0,
9
+            "Marks similar articles as read (requires pg_trgm)",
10
+            "fox");
11
+    }
12 12
 
13
-	public function save() {
14
-		$similarity = (float) $_POST["similarity"];
15
-		$min_title_length = (int) $_POST["min_title_length"];
16
-		$enable_globally = checkbox_to_sql_bool($_POST["enable_globally"]);
13
+    public function save() {
14
+        $similarity = (float) $_POST["similarity"];
15
+        $min_title_length = (int) $_POST["min_title_length"];
16
+        $enable_globally = checkbox_to_sql_bool($_POST["enable_globally"]);
17 17
 
18
-		if ($similarity < 0) $similarity = 0;
19
-		if ($similarity > 1) $similarity = 1;
18
+        if ($similarity < 0) $similarity = 0;
19
+        if ($similarity > 1) $similarity = 1;
20 20
 
21
-		if ($min_title_length < 0) $min_title_length = 0;
21
+        if ($min_title_length < 0) $min_title_length = 0;
22 22
 
23
-		$similarity = sprintf("%.2f", $similarity);
23
+        $similarity = sprintf("%.2f", $similarity);
24 24
 
25
-		$this->host->set($this, "similarity", $similarity);
26
-		$this->host->set($this, "min_title_length", $min_title_length);
27
-		$this->host->set($this, "enable_globally", $enable_globally);
25
+        $this->host->set($this, "similarity", $similarity);
26
+        $this->host->set($this, "min_title_length", $min_title_length);
27
+        $this->host->set($this, "enable_globally", $enable_globally);
28 28
 
29
-		echo T_sprintf("Data saved (%s, %d)", $similarity, $enable_globally);
30
-	}
29
+        echo T_sprintf("Data saved (%s, %d)", $similarity, $enable_globally);
30
+    }
31 31
 
32
-	public function init($host) {
33
-		$this->host = $host;
32
+    public function init($host) {
33
+        $this->host = $host;
34 34
 
35
-		$host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
36
-		$host->add_hook($host::HOOK_PREFS_TAB, $this);
37
-		$host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
38
-		$host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
39
-		$host->add_hook($host::HOOK_ARTICLE_BUTTON, $this);
35
+        $host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
36
+        $host->add_hook($host::HOOK_PREFS_TAB, $this);
37
+        $host->add_hook($host::HOOK_PREFS_EDIT_FEED, $this);
38
+        $host->add_hook($host::HOOK_PREFS_SAVE_FEED, $this);
39
+        $host->add_hook($host::HOOK_ARTICLE_BUTTON, $this);
40 40
 
41
-	}
41
+    }
42 42
 
43
-	public function get_js() {
44
-		return file_get_contents(__DIR__ . "/init.js");
45
-	}
43
+    public function get_js() {
44
+        return file_get_contents(__DIR__ . "/init.js");
45
+    }
46 46
 
47
-	public function showrelated() {
48
-		$id = (int) $_REQUEST['param'];
49
-		$owner_uid = $_SESSION["uid"];
47
+    public function showrelated() {
48
+        $id = (int) $_REQUEST['param'];
49
+        $owner_uid = $_SESSION["uid"];
50 50
 
51
-		$sth = $this->pdo->prepare("SELECT title FROM ttrss_entries, ttrss_user_entries
51
+        $sth = $this->pdo->prepare("SELECT title FROM ttrss_entries, ttrss_user_entries
52 52
 			WHERE ref_id = id AND id = ? AND owner_uid = ?");
53
-		$sth->execute([$id, $owner_uid]);
53
+        $sth->execute([$id, $owner_uid]);
54 54
 
55
-		if ($row = $sth->fetch()) {
55
+        if ($row = $sth->fetch()) {
56 56
 
57
-			$title = $row['title'];
57
+            $title = $row['title'];
58 58
 
59
-			print "<p>$title</p>";
59
+            print "<p>$title</p>";
60 60
 
61
-			$sth = $this->pdo->prepare("SELECT ttrss_entries.id AS id,
61
+            $sth = $this->pdo->prepare("SELECT ttrss_entries.id AS id,
62 62
 				feed_id,
63 63
 				ttrss_entries.title AS title,
64 64
 				updated, link,
@@ -75,77 +75,77 @@  discard block
 block discarded – undo
75 75
 				sm DESC, date_entered DESC
76 76
 			LIMIT 10");
77 77
 
78
-			$sth->execute([$title, $owner_uid, $id]);
78
+            $sth->execute([$title, $owner_uid, $id]);
79 79
 
80
-			print "<ul class='panel panel-scrollable'>";
80
+            print "<ul class='panel panel-scrollable'>";
81 81
 
82
-			while ($line = $sth->fetch()) {
83
-				print "<li style='display : flex'>";
84
-				print "<i class='material-icons'>bookmark_outline</i>";
82
+            while ($line = $sth->fetch()) {
83
+                print "<li style='display : flex'>";
84
+                print "<i class='material-icons'>bookmark_outline</i>";
85 85
 
86
-				$sm = sprintf("%.2f", $line['sm']);
87
-				$article_link = htmlspecialchars($line["link"]);
86
+                $sm = sprintf("%.2f", $line['sm']);
87
+                $article_link = htmlspecialchars($line["link"]);
88 88
 
89
-				print "<div style='flex-grow : 2'>";
89
+                print "<div style='flex-grow : 2'>";
90 90
 
91
-				print " <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"$article_link\">".
92
-					$line["title"]."</a>";
91
+                print " <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"$article_link\">".
92
+                    $line["title"]."</a>";
93 93
 
94
-				print " (<a href=\"#\" onclick=\"Feeds.open({feed:".$line["feed_id"]."})\">".
95
-					htmlspecialchars($line["feed_title"])."</a>)";
94
+                print " (<a href=\"#\" onclick=\"Feeds.open({feed:".$line["feed_id"]."})\">".
95
+                    htmlspecialchars($line["feed_title"])."</a>)";
96 96
 
97
-				print " &mdash; $sm";
97
+                print " &mdash; $sm";
98 98
 
99
-				print "</div>";
99
+                print "</div>";
100 100
 
101
-				print "<div style='text-align : right' class='text-muted'>" . smart_date_time(strtotime($line["updated"])) . "</div>";
101
+                print "<div style='text-align : right' class='text-muted'>" . smart_date_time(strtotime($line["updated"])) . "</div>";
102 102
 
103
-				print "</li>";
104
-			}
103
+                print "</li>";
104
+            }
105 105
 
106
-			print "</ul>";
106
+            print "</ul>";
107 107
 
108
-		}
108
+        }
109 109
 
110
-		print "<footer class='text-center'>";
111
-		print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('trgmRelatedDlg').hide()\">".__('Close this window')."</button>";
112
-		print "</footer>";
110
+        print "<footer class='text-center'>";
111
+        print "<button dojoType='dijit.form.Button' onclick=\"dijit.byId('trgmRelatedDlg').hide()\">".__('Close this window')."</button>";
112
+        print "</footer>";
113 113
 
114 114
 
115
-	}
115
+    }
116 116
 
117
-	public function hook_article_button($line) {
118
-		return "<i style=\"cursor : pointer\" class='material-icons'
117
+    public function hook_article_button($line) {
118
+        return "<i style=\"cursor : pointer\" class='material-icons'
119 119
 			onclick=\"Plugins.Psql_Trgm.showRelated(".$line["id"].")\"
120 120
 			title='".__('Show related articles')."'>bookmark_outline</i>";
121
-	}
121
+    }
122 122
 
123
-	public function hook_prefs_tab($args) {
124
-		if ($args != "prefFeeds") return;
123
+    public function hook_prefs_tab($args) {
124
+        if ($args != "prefFeeds") return;
125 125
 
126
-		print "<div dojoType=\"dijit.layout.AccordionPane\"
126
+        print "<div dojoType=\"dijit.layout.AccordionPane\"
127 127
 			title=\"<i class='material-icons'>extension</i> ".__('Mark similar articles as read')."\">";
128 128
 
129
-		if (DB_TYPE != "pgsql") {
130
-			print_error("Database type not supported.");
131
-		} else {
129
+        if (DB_TYPE != "pgsql") {
130
+            print_error("Database type not supported.");
131
+        } else {
132 132
 
133
-			$res = $this->pdo->query("select 'similarity'::regproc");
133
+            $res = $this->pdo->query("select 'similarity'::regproc");
134 134
 
135
-			if (!$res->fetch()) {
136
-				print_error("pg_trgm extension not found.");
137
-			}
135
+            if (!$res->fetch()) {
136
+                print_error("pg_trgm extension not found.");
137
+            }
138 138
 
139
-			$similarity = $this->host->get($this, "similarity");
140
-			$min_title_length = $this->host->get($this, "min_title_length");
141
-			$enable_globally = $this->host->get($this, "enable_globally");
139
+            $similarity = $this->host->get($this, "similarity");
140
+            $min_title_length = $this->host->get($this, "min_title_length");
141
+            $enable_globally = $this->host->get($this, "enable_globally");
142 142
 
143
-			if (!$similarity) $similarity = '0.75';
144
-			if (!$min_title_length) $min_title_length = '32';
143
+            if (!$similarity) $similarity = '0.75';
144
+            if (!$min_title_length) $min_title_length = '32';
145 145
 
146
-			print "<form dojoType=\"dijit.form.Form\">";
146
+            print "<form dojoType=\"dijit.form.Form\">";
147 147
 
148
-			print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">
148
+            print "<script type=\"dojo/method\" event=\"onSubmit\" args=\"evt\">
149 149
 				evt.preventDefault();
150 150
 				if (this.validate()) {
151 151
 					console.log(dojo.objectToQuery(this.getValues()));
@@ -159,190 +159,190 @@  discard block
 block discarded – undo
159 159
 				}
160 160
 				</script>";
161 161
 
162
-			print_hidden("op", "pluginhandler");
163
-			print_hidden("method", "save");
164
-			print_hidden("plugin", "af_psql_trgm");
162
+            print_hidden("op", "pluginhandler");
163
+            print_hidden("method", "save");
164
+            print_hidden("plugin", "af_psql_trgm");
165 165
 
166
-			print "<h2>" . __("Global settings") . "</h2>";
166
+            print "<h2>" . __("Global settings") . "</h2>";
167 167
 
168
-			print_notice("Enable for specific feeds in the feed editor.");
168
+            print_notice("Enable for specific feeds in the feed editor.");
169 169
 
170
-			print "<fieldset>";
170
+            print "<fieldset>";
171 171
 
172
-			print "<label>" . __("Minimum similarity:") . "</label> ";
173
-			print "<input dojoType=\"dijit.form.NumberSpinner\"
172
+            print "<label>" . __("Minimum similarity:") . "</label> ";
173
+            print "<input dojoType=\"dijit.form.NumberSpinner\"
174 174
 				placeholder=\"0.75\" id='psql_trgm_similarity'
175 175
 				required=\"1\" name=\"similarity\" value=\"$similarity\">";
176 176
 
177
-			print "<div dojoType='dijit.Tooltip' connectId='psql_trgm_similarity' position='below'>" .
178
-				__("PostgreSQL trigram extension returns string similarity as a floating point number (0-1). Setting it too low might produce false positives, zero disables checking.") .
179
-				"</div>";
177
+            print "<div dojoType='dijit.Tooltip' connectId='psql_trgm_similarity' position='below'>" .
178
+                __("PostgreSQL trigram extension returns string similarity as a floating point number (0-1). Setting it too low might produce false positives, zero disables checking.") .
179
+                "</div>";
180 180
 
181
-			print "</fieldset><fieldset>";
181
+            print "</fieldset><fieldset>";
182 182
 
183
-			print "<label>" . __("Minimum title length:") . "</label> ";
184
-			print "<input dojoType=\"dijit.form.NumberSpinner\"
183
+            print "<label>" . __("Minimum title length:") . "</label> ";
184
+            print "<input dojoType=\"dijit.form.NumberSpinner\"
185 185
 				placeholder=\"32\"
186 186
 				required=\"1\" name=\"min_title_length\" value=\"$min_title_length\">";
187 187
 
188
-			print "</fieldset><fieldset>";
188
+            print "</fieldset><fieldset>";
189 189
 
190
-			print "<label class='checkbox'>";
191
-			print_checkbox("enable_globally", $enable_globally);
192
-			print " " . __("Enable for all feeds:");
193
-			print "</label>";
190
+            print "<label class='checkbox'>";
191
+            print_checkbox("enable_globally", $enable_globally);
192
+            print " " . __("Enable for all feeds:");
193
+            print "</label>";
194 194
 
195
-			print "</fieldset>";
195
+            print "</fieldset>";
196 196
 
197
-			print_button("submit", __("Save"), "class='alt-primary'");
198
-			print "</form>";
197
+            print_button("submit", __("Save"), "class='alt-primary'");
198
+            print "</form>";
199 199
 
200
-			$enabled_feeds = $this->host->get($this, "enabled_feeds");
201
-			if (!array($enabled_feeds)) $enabled_feeds = array();
200
+            $enabled_feeds = $this->host->get($this, "enabled_feeds");
201
+            if (!array($enabled_feeds)) $enabled_feeds = array();
202 202
 
203
-			$enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
204
-			$this->host->set($this, "enabled_feeds", $enabled_feeds);
203
+            $enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
204
+            $this->host->set($this, "enabled_feeds", $enabled_feeds);
205 205
 
206
-			if (count($enabled_feeds) > 0) {
207
-				print "<h3>" . __("Currently enabled for (click to edit):") . "</h3>";
206
+            if (count($enabled_feeds) > 0) {
207
+                print "<h3>" . __("Currently enabled for (click to edit):") . "</h3>";
208 208
 
209
-				print "<ul class=\"panel panel-scrollable list list-unstyled\">";
210
-				foreach ($enabled_feeds as $f) {
211
-					print "<li>" .
212
-						"<i class='material-icons'>rss_feed</i> <a href='#'
209
+                print "<ul class=\"panel panel-scrollable list list-unstyled\">";
210
+                foreach ($enabled_feeds as $f) {
211
+                    print "<li>" .
212
+                        "<i class='material-icons'>rss_feed</i> <a href='#'
213 213
 							onclick='CommonDialogs.editFeed($f)'>" .
214
-						Feeds::getFeedTitle($f) . "</a></li>";
215
-				}
216
-				print "</ul>";
217
-			}
218
-		}
214
+                        Feeds::getFeedTitle($f) . "</a></li>";
215
+                }
216
+                print "</ul>";
217
+            }
218
+        }
219 219
 
220
-		print "</div>";
221
-	}
220
+        print "</div>";
221
+    }
222 222
 
223
-	public function hook_prefs_edit_feed($feed_id) {
224
-		print "<header>".__("Similarity (pg_trgm)")."</header>";
225
-		print "<section>";
223
+    public function hook_prefs_edit_feed($feed_id) {
224
+        print "<header>".__("Similarity (pg_trgm)")."</header>";
225
+        print "<section>";
226 226
 
227
-		$enabled_feeds = $this->host->get($this, "enabled_feeds");
228
-		if (!array($enabled_feeds)) $enabled_feeds = array();
227
+        $enabled_feeds = $this->host->get($this, "enabled_feeds");
228
+        if (!array($enabled_feeds)) $enabled_feeds = array();
229 229
 
230
-		$key = array_search($feed_id, $enabled_feeds);
231
-		$checked = $key !== false ? "checked" : "";
230
+        $key = array_search($feed_id, $enabled_feeds);
231
+        $checked = $key !== false ? "checked" : "";
232 232
 
233
-		print "<fieldset>";
233
+        print "<fieldset>";
234 234
 
235
-		print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='trgm_similarity_enabled'
235
+        print "<label class='checkbox'><input dojoType='dijit.form.CheckBox' type='checkbox' id='trgm_similarity_enabled'
236 236
 			name='trgm_similarity_enabled' $checked> ".__('Mark similar articles as read')."</label>";
237 237
 
238
-		print "</fieldset>";
238
+        print "</fieldset>";
239 239
 
240
-		print "</section>";
241
-	}
240
+        print "</section>";
241
+    }
242 242
 
243
-	public function hook_prefs_save_feed($feed_id) {
244
-		$enabled_feeds = $this->host->get($this, "enabled_feeds");
245
-		if (!is_array($enabled_feeds)) $enabled_feeds = array();
243
+    public function hook_prefs_save_feed($feed_id) {
244
+        $enabled_feeds = $this->host->get($this, "enabled_feeds");
245
+        if (!is_array($enabled_feeds)) $enabled_feeds = array();
246 246
 
247
-		$enable = checkbox_to_sql_bool($_POST["trgm_similarity_enabled"]);
248
-		$key = array_search($feed_id, $enabled_feeds);
247
+        $enable = checkbox_to_sql_bool($_POST["trgm_similarity_enabled"]);
248
+        $key = array_search($feed_id, $enabled_feeds);
249 249
 
250
-		if ($enable) {
251
-			if ($key === false) {
252
-				array_push($enabled_feeds, $feed_id);
253
-			}
254
-		} else {
255
-			if ($key !== false) {
256
-				unset($enabled_feeds[$key]);
257
-			}
258
-		}
250
+        if ($enable) {
251
+            if ($key === false) {
252
+                array_push($enabled_feeds, $feed_id);
253
+            }
254
+        } else {
255
+            if ($key !== false) {
256
+                unset($enabled_feeds[$key]);
257
+            }
258
+        }
259 259
 
260
-		$this->host->set($this, "enabled_feeds", $enabled_feeds);
261
-	}
260
+        $this->host->set($this, "enabled_feeds", $enabled_feeds);
261
+    }
262 262
 
263
-	public function hook_article_filter($article) {
263
+    public function hook_article_filter($article) {
264 264
 
265
-		if (DB_TYPE != "pgsql") return $article;
265
+        if (DB_TYPE != "pgsql") return $article;
266 266
 
267
-		$res = $this->pdo->query("select 'similarity'::regproc");
268
-		if (!$res->fetch()) return $article;
267
+        $res = $this->pdo->query("select 'similarity'::regproc");
268
+        if (!$res->fetch()) return $article;
269 269
 
270
-		$enable_globally = $this->host->get($this, "enable_globally");
270
+        $enable_globally = $this->host->get($this, "enable_globally");
271 271
 
272
-		if (!$enable_globally) {
273
-			$enabled_feeds = $this->host->get($this, "enabled_feeds");
274
-			$key = array_search($article["feed"]["id"], $enabled_feeds);
275
-			if ($key === false) return $article;
276
-		}
272
+        if (!$enable_globally) {
273
+            $enabled_feeds = $this->host->get($this, "enabled_feeds");
274
+            $key = array_search($article["feed"]["id"], $enabled_feeds);
275
+            if ($key === false) return $article;
276
+        }
277 277
 
278
-		$similarity = (float) $this->host->get($this, "similarity");
279
-		if ($similarity < 0.01) return $article;
278
+        $similarity = (float) $this->host->get($this, "similarity");
279
+        if ($similarity < 0.01) return $article;
280 280
 
281
-		$min_title_length = (int) $this->host->get($this, "min_title_length");
282
-		if (mb_strlen($article["title"]) < $min_title_length) return $article;
281
+        $min_title_length = (int) $this->host->get($this, "min_title_length");
282
+        if (mb_strlen($article["title"]) < $min_title_length) return $article;
283 283
 
284
-		$owner_uid = $article["owner_uid"];
285
-		$entry_guid = $article["guid_hashed"];
286
-		$title_escaped = $article["title"];
284
+        $owner_uid = $article["owner_uid"];
285
+        $entry_guid = $article["guid_hashed"];
286
+        $title_escaped = $article["title"];
287 287
 
288
-		// trgm does not return similarity=1 for completely equal strings
288
+        // trgm does not return similarity=1 for completely equal strings
289 289
 
290
-		$sth = $this->pdo->prepare("SELECT COUNT(id) AS nequal
290
+        $sth = $this->pdo->prepare("SELECT COUNT(id) AS nequal
291 291
 		  FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id AND
292 292
 		  date_entered >= NOW() - interval '3 days' AND
293 293
 		  title = ? AND
294 294
 		  guid != ? AND
295 295
 		  owner_uid = ?");
296
-		$sth->execute([$title_escaped, $entry_guid, $owner_uid]);
296
+        $sth->execute([$title_escaped, $entry_guid, $owner_uid]);
297 297
 
298
-		$row = $sth->fetch();
299
-		$nequal = $row['nequal'];
298
+        $row = $sth->fetch();
299
+        $nequal = $row['nequal'];
300 300
 
301
-		Debug::log("af_psql_trgm: num equals: $nequal", Debug::$LOG_EXTENDED);
301
+        Debug::log("af_psql_trgm: num equals: $nequal", Debug::$LOG_EXTENDED);
302 302
 
303
-		if ($nequal != 0) {
304
-			$article["force_catchup"] = true;
305
-			return $article;
306
-		}
303
+        if ($nequal != 0) {
304
+            $article["force_catchup"] = true;
305
+            return $article;
306
+        }
307 307
 
308
-		$sth = $this->pdo->prepare("SELECT MAX(SIMILARITY(title, ?)) AS ms
308
+        $sth = $this->pdo->prepare("SELECT MAX(SIMILARITY(title, ?)) AS ms
309 309
 		  FROM ttrss_entries, ttrss_user_entries WHERE ref_id = id AND
310 310
 		  date_entered >= NOW() - interval '1 day' AND
311 311
 		  guid != ? AND
312 312
 		  owner_uid = ?");
313
-		$sth->execute([$title_escaped, $entry_guid, $owner_uid]);
313
+        $sth->execute([$title_escaped, $entry_guid, $owner_uid]);
314 314
 
315
-		$row = $sth->fetch();
316
-		$similarity_result = $row['ms'];
315
+        $row = $sth->fetch();
316
+        $similarity_result = $row['ms'];
317 317
 
318
-		Debug::log("af_psql_trgm: similarity result: $similarity_result", Debug::$LOG_EXTENDED);
318
+        Debug::log("af_psql_trgm: similarity result: $similarity_result", Debug::$LOG_EXTENDED);
319 319
 
320
-		if ($similarity_result >= $similarity) {
321
-			$article["force_catchup"] = true;
322
-		}
320
+        if ($similarity_result >= $similarity) {
321
+            $article["force_catchup"] = true;
322
+        }
323 323
 
324
-		return $article;
324
+        return $article;
325 325
 
326
-	}
326
+    }
327 327
 
328
-	public function api_version() {
329
-		return 2;
330
-	}
328
+    public function api_version() {
329
+        return 2;
330
+    }
331 331
 
332
-	private function filter_unknown_feeds($enabled_feeds) {
333
-		$tmp = array();
332
+    private function filter_unknown_feeds($enabled_feeds) {
333
+        $tmp = array();
334 334
 
335
-		foreach ($enabled_feeds as $feed) {
335
+        foreach ($enabled_feeds as $feed) {
336 336
 
337
-			$sth = $this->pdo->prepare("SELECT id FROM ttrss_feeds WHERE id = ? AND owner_uid = ?");
338
-			$sth->execute([$feed, $_SESSION['uid']]);
337
+            $sth = $this->pdo->prepare("SELECT id FROM ttrss_feeds WHERE id = ? AND owner_uid = ?");
338
+            $sth->execute([$feed, $_SESSION['uid']]);
339 339
 
340
-			if ($row = $sth->fetch()) {
341
-				array_push($tmp, $feed);
342
-			}
343
-		}
340
+            if ($row = $sth->fetch()) {
341
+                array_push($tmp, $feed);
342
+            }
343
+        }
344 344
 
345
-		return $tmp;
346
-	}
345
+        return $tmp;
346
+    }
347 347
 
348 348
 }
Please login to merge, or discard this patch.
Braces   +42 added lines, -14 removed lines patch added patch discarded remove patch
@@ -15,10 +15,16 @@  discard block
 block discarded – undo
15 15
 		$min_title_length = (int) $_POST["min_title_length"];
16 16
 		$enable_globally = checkbox_to_sql_bool($_POST["enable_globally"]);
17 17
 
18
-		if ($similarity < 0) $similarity = 0;
19
-		if ($similarity > 1) $similarity = 1;
18
+		if ($similarity < 0) {
19
+		    $similarity = 0;
20
+		}
21
+		if ($similarity > 1) {
22
+		    $similarity = 1;
23
+		}
20 24
 
21
-		if ($min_title_length < 0) $min_title_length = 0;
25
+		if ($min_title_length < 0) {
26
+		    $min_title_length = 0;
27
+		}
22 28
 
23 29
 		$similarity = sprintf("%.2f", $similarity);
24 30
 
@@ -121,7 +127,9 @@  discard block
 block discarded – undo
121 127
 	}
122 128
 
123 129
 	public function hook_prefs_tab($args) {
124
-		if ($args != "prefFeeds") return;
130
+		if ($args != "prefFeeds") {
131
+		    return;
132
+		}
125 133
 
126 134
 		print "<div dojoType=\"dijit.layout.AccordionPane\"
127 135
 			title=\"<i class='material-icons'>extension</i> ".__('Mark similar articles as read')."\">";
@@ -140,8 +148,12 @@  discard block
 block discarded – undo
140 148
 			$min_title_length = $this->host->get($this, "min_title_length");
141 149
 			$enable_globally = $this->host->get($this, "enable_globally");
142 150
 
143
-			if (!$similarity) $similarity = '0.75';
144
-			if (!$min_title_length) $min_title_length = '32';
151
+			if (!$similarity) {
152
+			    $similarity = '0.75';
153
+			}
154
+			if (!$min_title_length) {
155
+			    $min_title_length = '32';
156
+			}
145 157
 
146 158
 			print "<form dojoType=\"dijit.form.Form\">";
147 159
 
@@ -198,7 +210,9 @@  discard block
 block discarded – undo
198 210
 			print "</form>";
199 211
 
200 212
 			$enabled_feeds = $this->host->get($this, "enabled_feeds");
201
-			if (!array($enabled_feeds)) $enabled_feeds = array();
213
+			if (!array($enabled_feeds)) {
214
+			    $enabled_feeds = array();
215
+			}
202 216
 
203 217
 			$enabled_feeds = $this->filter_unknown_feeds($enabled_feeds);
204 218
 			$this->host->set($this, "enabled_feeds", $enabled_feeds);
@@ -225,7 +239,9 @@  discard block
 block discarded – undo
225 239
 		print "<section>";
226 240
 
227 241
 		$enabled_feeds = $this->host->get($this, "enabled_feeds");
228
-		if (!array($enabled_feeds)) $enabled_feeds = array();
242
+		if (!array($enabled_feeds)) {
243
+		    $enabled_feeds = array();
244
+		}
229 245
 
230 246
 		$key = array_search($feed_id, $enabled_feeds);
231 247
 		$checked = $key !== false ? "checked" : "";
@@ -242,7 +258,9 @@  discard block
 block discarded – undo
242 258
 
243 259
 	public function hook_prefs_save_feed($feed_id) {
244 260
 		$enabled_feeds = $this->host->get($this, "enabled_feeds");
245
-		if (!is_array($enabled_feeds)) $enabled_feeds = array();
261
+		if (!is_array($enabled_feeds)) {
262
+		    $enabled_feeds = array();
263
+		}
246 264
 
247 265
 		$enable = checkbox_to_sql_bool($_POST["trgm_similarity_enabled"]);
248 266
 		$key = array_search($feed_id, $enabled_feeds);
@@ -262,24 +280,34 @@  discard block
 block discarded – undo
262 280
 
263 281
 	public function hook_article_filter($article) {
264 282
 
265
-		if (DB_TYPE != "pgsql") return $article;
283
+		if (DB_TYPE != "pgsql") {
284
+		    return $article;
285
+		}
266 286
 
267 287
 		$res = $this->pdo->query("select 'similarity'::regproc");
268
-		if (!$res->fetch()) return $article;
288
+		if (!$res->fetch()) {
289
+		    return $article;
290
+		}
269 291
 
270 292
 		$enable_globally = $this->host->get($this, "enable_globally");
271 293
 
272 294
 		if (!$enable_globally) {
273 295
 			$enabled_feeds = $this->host->get($this, "enabled_feeds");
274 296
 			$key = array_search($article["feed"]["id"], $enabled_feeds);
275
-			if ($key === false) return $article;
297
+			if ($key === false) {
298
+			    return $article;
299
+			}
276 300
 		}
277 301
 
278 302
 		$similarity = (float) $this->host->get($this, "similarity");
279
-		if ($similarity < 0.01) return $article;
303
+		if ($similarity < 0.01) {
304
+		    return $article;
305
+		}
280 306
 
281 307
 		$min_title_length = (int) $this->host->get($this, "min_title_length");
282
-		if (mb_strlen($article["title"]) < $min_title_length) return $article;
308
+		if (mb_strlen($article["title"]) < $min_title_length) {
309
+		    return $article;
310
+		}
283 311
 
284 312
 		$owner_uid = $article["owner_uid"];
285 313
 		$entry_guid = $article["guid_hashed"];
Please login to merge, or discard this patch.
plugins/af_comics/init.php 1 patch
Indentation   +131 added lines, -131 removed lines patch added patch discarded remove patch
@@ -1,187 +1,187 @@
 block discarded – undo
1 1
 <?php
2 2
 class Af_Comics extends Plugin {
3 3
 
4
-	private $host;
5
-	private $filters = array();
4
+    private $host;
5
+    private $filters = array();
6 6
 
7
-	public function about() {
8
-		return array(2.0,
9
-			"Fixes RSS feeds of assorted comic strips",
10
-			"fox");
11
-	}
7
+    public function about() {
8
+        return array(2.0,
9
+            "Fixes RSS feeds of assorted comic strips",
10
+            "fox");
11
+    }
12 12
 
13
-	public function init($host) {
14
-		$this->host = $host;
13
+    public function init($host) {
14
+        $this->host = $host;
15 15
 
16
-		$host->add_hook($host::HOOK_FETCH_FEED, $this);
17
-		$host->add_hook($host::HOOK_FEED_BASIC_INFO, $this);
18
-		$host->add_hook($host::HOOK_SUBSCRIBE_FEED, $this);
19
-		$host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
20
-		$host->add_hook($host::HOOK_PREFS_TAB, $this);
16
+        $host->add_hook($host::HOOK_FETCH_FEED, $this);
17
+        $host->add_hook($host::HOOK_FEED_BASIC_INFO, $this);
18
+        $host->add_hook($host::HOOK_SUBSCRIBE_FEED, $this);
19
+        $host->add_hook($host::HOOK_ARTICLE_FILTER, $this);
20
+        $host->add_hook($host::HOOK_PREFS_TAB, $this);
21 21
 
22
-		require_once __DIR__ . "/filter_base.php";
22
+        require_once __DIR__ . "/filter_base.php";
23 23
 
24
-		$filters = array_merge(glob(__DIR__ . "/filters.local/*.php"), glob(__DIR__ . "/filters/*.php"));
25
-		$names = [];
24
+        $filters = array_merge(glob(__DIR__ . "/filters.local/*.php"), glob(__DIR__ . "/filters/*.php"));
25
+        $names = [];
26 26
 
27
-		foreach ($filters as $file) {
28
-			$filter_name = preg_replace("/\..*$/", "", basename($file));
27
+        foreach ($filters as $file) {
28
+            $filter_name = preg_replace("/\..*$/", "", basename($file));
29 29
 
30
-			if (array_search($filter_name, $names) === false) {
31
-				if (!class_exists($filter_name)) {
32
-					require_once $file;
33
-				}
30
+            if (array_search($filter_name, $names) === false) {
31
+                if (!class_exists($filter_name)) {
32
+                    require_once $file;
33
+                }
34 34
 
35
-				array_push($names, $filter_name);
35
+                array_push($names, $filter_name);
36 36
 
37
-				$filter = new $filter_name();
37
+                $filter = new $filter_name();
38 38
 
39
-				if (is_subclass_of($filter, "Af_ComicFilter")) {
40
-					array_push($this->filters, $filter);
41
-					array_push($names, $filter_name);
42
-				}
43
-			}
44
-		}
45
-	}
39
+                if (is_subclass_of($filter, "Af_ComicFilter")) {
40
+                    array_push($this->filters, $filter);
41
+                    array_push($names, $filter_name);
42
+                }
43
+            }
44
+        }
45
+    }
46 46
 
47
-	public function hook_prefs_tab($args) {
48
-		if ($args != "prefFeeds") return;
47
+    public function hook_prefs_tab($args) {
48
+        if ($args != "prefFeeds") return;
49 49
 
50
-		print "<div dojoType=\"dijit.layout.AccordionPane\"
50
+        print "<div dojoType=\"dijit.layout.AccordionPane\"
51 51
 			title=\"<i class='material-icons'>photo</i> ".__('Feeds supported by af_comics')."\">";
52 52
 
53
-		print "<p>" . __("The following comics are currently supported:") . "</p>";
53
+        print "<p>" . __("The following comics are currently supported:") . "</p>";
54 54
 
55
-		$comics = array("GoComics");
55
+        $comics = array("GoComics");
56 56
 
57
-		foreach ($this->filters as $f) {
58
-			foreach ($f->supported() as $comic) {
59
-				array_push($comics, $comic);
60
-			}
61
-		}
57
+        foreach ($this->filters as $f) {
58
+            foreach ($f->supported() as $comic) {
59
+                array_push($comics, $comic);
60
+            }
61
+        }
62 62
 
63
-		asort($comics);
63
+        asort($comics);
64 64
 
65
-		print "<ul class='panel panel-scrollable list list-unstyled'>";
66
-		foreach ($comics as $comic) {
67
-			print "<li>$comic</li>";
68
-		}
69
-		print "</ul>";
65
+        print "<ul class='panel panel-scrollable list list-unstyled'>";
66
+        foreach ($comics as $comic) {
67
+            print "<li>$comic</li>";
68
+        }
69
+        print "</ul>";
70 70
 
71
-		print "<p>".__("To subscribe to GoComics use the comic's regular web page as the feed URL (e.g. for the <em>Garfield</em> comic use <code>http://www.gocomics.com/garfield</code>).")."</p>";
71
+        print "<p>".__("To subscribe to GoComics use the comic's regular web page as the feed URL (e.g. for the <em>Garfield</em> comic use <code>http://www.gocomics.com/garfield</code>).")."</p>";
72 72
 
73
-		print "<p>".__('Drop any updated filters into <code>filters.local</code> in plugin directory.')."</p>";
73
+        print "<p>".__('Drop any updated filters into <code>filters.local</code> in plugin directory.')."</p>";
74 74
 
75
-		print "</div>";
76
-	}
75
+        print "</div>";
76
+    }
77 77
 
78
-	public function hook_article_filter($article) {
79
-		foreach ($this->filters as $f) {
80
-			if ($f->process($article))
81
-				break;
82
-		}
78
+    public function hook_article_filter($article) {
79
+        foreach ($this->filters as $f) {
80
+            if ($f->process($article))
81
+                break;
82
+        }
83 83
 
84
-		return $article;
85
-	}
84
+        return $article;
85
+    }
86 86
 
87
-	// GoComics dropped feed support so it needs to be handled when fetching the feed.
88
-	/**
89
-	 * @SuppressWarnings(PHPMD.UnusedFormalParameter)
90
-	 */
91
-	public function hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed, $last_article_timestamp, $auth_login, $auth_pass) {
92
-		if ($auth_login || $auth_pass)
93
-			return $feed_data;
87
+    // GoComics dropped feed support so it needs to be handled when fetching the feed.
88
+    /**
89
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
90
+     */
91
+    public function hook_fetch_feed($feed_data, $fetch_url, $owner_uid, $feed, $last_article_timestamp, $auth_login, $auth_pass) {
92
+        if ($auth_login || $auth_pass)
93
+            return $feed_data;
94 94
 
95
-		if (preg_match('#^https?://(?:feeds\.feedburner\.com/uclick|www\.gocomics\.com)/([-a-z0-9]+)$#i', $fetch_url, $comic)) {
96
-			$site_url = 'https://www.gocomics.com/' . $comic[1];
95
+        if (preg_match('#^https?://(?:feeds\.feedburner\.com/uclick|www\.gocomics\.com)/([-a-z0-9]+)$#i', $fetch_url, $comic)) {
96
+            $site_url = 'https://www.gocomics.com/' . $comic[1];
97 97
 
98
-			$article_link = $site_url . date('/Y/m/d');
98
+            $article_link = $site_url . date('/Y/m/d');
99 99
 
100
-			$body = fetch_file_contents(array('url' => $article_link, 'type' => 'text/html', 'followlocation' => false));
100
+            $body = fetch_file_contents(array('url' => $article_link, 'type' => 'text/html', 'followlocation' => false));
101 101
 
102
-			require_once 'lib/MiniTemplator.class.php';
102
+            require_once 'lib/MiniTemplator.class.php';
103 103
 
104
-			$feed_title = htmlspecialchars($comic[1]);
105
-			$site_url = htmlspecialchars($site_url);
106
-			$article_link = htmlspecialchars($article_link);
104
+            $feed_title = htmlspecialchars($comic[1]);
105
+            $site_url = htmlspecialchars($site_url);
106
+            $article_link = htmlspecialchars($article_link);
107 107
 
108
-			$tpl = new MiniTemplator();
108
+            $tpl = new MiniTemplator();
109 109
 
110
-			$tpl->readTemplateFromFile('templates/generated_feed.txt');
110
+            $tpl->readTemplateFromFile('templates/generated_feed.txt');
111 111
 
112
-			$tpl->setVariable('FEED_TITLE', $feed_title, true);
113
-			$tpl->setVariable('VERSION', get_version(), true);
114
-			$tpl->setVariable('FEED_URL', htmlspecialchars($fetch_url), true);
115
-			$tpl->setVariable('SELF_URL', $site_url, true);
112
+            $tpl->setVariable('FEED_TITLE', $feed_title, true);
113
+            $tpl->setVariable('VERSION', get_version(), true);
114
+            $tpl->setVariable('FEED_URL', htmlspecialchars($fetch_url), true);
115
+            $tpl->setVariable('SELF_URL', $site_url, true);
116 116
 
117
-			if ($body) {
118
-				$doc = new DOMDocument();
117
+            if ($body) {
118
+                $doc = new DOMDocument();
119 119
 
120
-				if (@$doc->loadHTML($body)) {
121
-					$xpath = new DOMXPath($doc);
120
+                if (@$doc->loadHTML($body)) {
121
+                    $xpath = new DOMXPath($doc);
122 122
 
123
-					$node = $xpath->query('//picture[contains(@class, "item-comic-image")]/img')->item(0);
123
+                    $node = $xpath->query('//picture[contains(@class, "item-comic-image")]/img')->item(0);
124 124
 
125
-					if ($node) {
126
-						$title = $xpath->query('//h1')->item(0);
125
+                    if ($node) {
126
+                        $title = $xpath->query('//h1')->item(0);
127 127
 
128
-						if ($title) {
129
-							$title = clean(trim($title->nodeValue));
130
-						} else {
131
-							$title = date('l, F d, Y');
132
-						}
128
+                        if ($title) {
129
+                            $title = clean(trim($title->nodeValue));
130
+                        } else {
131
+                            $title = date('l, F d, Y');
132
+                        }
133 133
 
134
-						foreach (['srcset', 'sizes', 'data-srcset', 'width'] as $attr ) {
135
-							$node->removeAttribute($attr);
136
-						}
134
+                        foreach (['srcset', 'sizes', 'data-srcset', 'width'] as $attr ) {
135
+                            $node->removeAttribute($attr);
136
+                        }
137 137
 
138
-						$tpl->setVariable('ARTICLE_ID', $article_link, true);
139
-						$tpl->setVariable('ARTICLE_LINK', $article_link, true);
140
-						$tpl->setVariable('ARTICLE_UPDATED_ATOM', date('c', mktime(11, 0, 0)), true);
141
-						$tpl->setVariable('ARTICLE_TITLE', htmlspecialchars($title), true);
142
-						$tpl->setVariable('ARTICLE_EXCERPT', '', true);
143
-						$tpl->setVariable('ARTICLE_CONTENT', $doc->saveHTML($node), true);
138
+                        $tpl->setVariable('ARTICLE_ID', $article_link, true);
139
+                        $tpl->setVariable('ARTICLE_LINK', $article_link, true);
140
+                        $tpl->setVariable('ARTICLE_UPDATED_ATOM', date('c', mktime(11, 0, 0)), true);
141
+                        $tpl->setVariable('ARTICLE_TITLE', htmlspecialchars($title), true);
142
+                        $tpl->setVariable('ARTICLE_EXCERPT', '', true);
143
+                        $tpl->setVariable('ARTICLE_CONTENT', $doc->saveHTML($node), true);
144 144
 
145
-						$tpl->setVariable('ARTICLE_AUTHOR', '', true);
146
-						$tpl->setVariable('ARTICLE_SOURCE_LINK', $site_url, true);
147
-						$tpl->setVariable('ARTICLE_SOURCE_TITLE', $feed_title, true);
145
+                        $tpl->setVariable('ARTICLE_AUTHOR', '', true);
146
+                        $tpl->setVariable('ARTICLE_SOURCE_LINK', $site_url, true);
147
+                        $tpl->setVariable('ARTICLE_SOURCE_TITLE', $feed_title, true);
148 148
 
149
-						$tpl->addBlock('entry');
150
-					}
151
-				}
152
-			}
149
+                        $tpl->addBlock('entry');
150
+                    }
151
+                }
152
+            }
153 153
 
154
-			$tpl->addBlock('feed');
154
+            $tpl->addBlock('feed');
155 155
 
156
-			if ($tpl->generateOutputToString($tmp_data))
157
-				$feed_data = $tmp_data;
158
-		}
156
+            if ($tpl->generateOutputToString($tmp_data))
157
+                $feed_data = $tmp_data;
158
+        }
159 159
 
160
-		return $feed_data;
161
-	}
160
+        return $feed_data;
161
+    }
162 162
 
163
-	public function hook_subscribe_feed($contents, $url, $auth_login, $auth_pass) {
164
-		if ($auth_login || $auth_pass)
165
-			return $contents;
163
+    public function hook_subscribe_feed($contents, $url, $auth_login, $auth_pass) {
164
+        if ($auth_login || $auth_pass)
165
+            return $contents;
166 166
 
167
-		if (preg_match('#^https?://www\.gocomics\.com/([-a-z0-9]+)$#i', $url))
168
-			return '<?xml version="1.0" encoding="utf-8"?>'; // Get is_html() to return false.
167
+        if (preg_match('#^https?://www\.gocomics\.com/([-a-z0-9]+)$#i', $url))
168
+            return '<?xml version="1.0" encoding="utf-8"?>'; // Get is_html() to return false.
169 169
 
170
-		return $contents;
171
-	}
170
+        return $contents;
171
+    }
172 172
 
173
-	public function hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed, $auth_login, $auth_pass) {
174
-		if ($auth_login || $auth_pass)
175
-			return $basic_info;
173
+    public function hook_feed_basic_info($basic_info, $fetch_url, $owner_uid, $feed, $auth_login, $auth_pass) {
174
+        if ($auth_login || $auth_pass)
175
+            return $basic_info;
176 176
 
177
-		if (preg_match('#^https?://www\.gocomics\.com/([-a-z0-9]+)$#i', $fetch_url, $matches))
178
-			$basic_info = array('title' => ucfirst($matches[1]), 'site_url' => $matches[0]);
177
+        if (preg_match('#^https?://www\.gocomics\.com/([-a-z0-9]+)$#i', $fetch_url, $matches))
178
+            $basic_info = array('title' => ucfirst($matches[1]), 'site_url' => $matches[0]);
179 179
 
180
-		return $basic_info;
181
-	}
180
+        return $basic_info;
181
+    }
182 182
 
183
-	public function api_version() {
184
-		return 2;
185
-	}
183
+    public function api_version() {
184
+        return 2;
185
+    }
186 186
 
187 187
 }
Please login to merge, or discard this patch.
plugins/af_comics/filters/af_comics_whomp.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -1,36 +1,36 @@
 block discarded – undo
1 1
 <?php
2 2
 class Af_Comics_Whomp extends Af_ComicFilter {
3 3
 
4
-	public function supported() {
5
-		return array("Whomp!");
6
-	}
4
+    public function supported() {
5
+        return array("Whomp!");
6
+    }
7 7
 
8
-	public function process(&$article) {
9
-		if (strpos($article["guid"], "whompcomic.com") !== false) {
8
+    public function process(&$article) {
9
+        if (strpos($article["guid"], "whompcomic.com") !== false) {
10 10
 
11
-			$res = fetch_file_contents($article["link"], false, false, false,
12
-				 false, false, 0,
13
-				 "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)");
11
+            $res = fetch_file_contents($article["link"], false, false, false,
12
+                    false, false, 0,
13
+                    "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)");
14 14
 
15
-			global $fetch_last_error_content;
15
+            global $fetch_last_error_content;
16 16
 
17
-			if (!$res && $fetch_last_error_content)
18
-				$res = $fetch_last_error_content;
17
+            if (!$res && $fetch_last_error_content)
18
+                $res = $fetch_last_error_content;
19 19
 
20
-			$doc = new DOMDocument();
20
+            $doc = new DOMDocument();
21 21
 
22
-			if (@$doc->loadHTML($res)) {
23
-				$xpath = new DOMXPath($doc);
24
-				$basenode = $xpath->query('//img[@id="cc-comic"]')->item(0);
22
+            if (@$doc->loadHTML($res)) {
23
+                $xpath = new DOMXPath($doc);
24
+                $basenode = $xpath->query('//img[@id="cc-comic"]')->item(0);
25 25
 
26
-				if ($basenode) {
27
-					$article["content"] = $doc->saveHTML($basenode);
28
-				}
29
-			}
26
+                if ($basenode) {
27
+                    $article["content"] = $doc->saveHTML($basenode);
28
+                }
29
+            }
30 30
 
31
-			return true;
32
-		}
31
+            return true;
32
+        }
33 33
 
34
-		return false;
35
-	}
34
+        return false;
35
+    }
36 36
 }
Please login to merge, or discard this patch.
plugins/af_comics/filters/af_comics_twp.php 1 patch
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -1,29 +1,29 @@
 block discarded – undo
1 1
 <?php
2 2
 class Af_Comics_Twp extends Af_ComicFilter {
3 3
 
4
-	public function supported() {
5
-		return array("Three Word Phrase");
6
-	}
4
+    public function supported() {
5
+        return array("Three Word Phrase");
6
+    }
7 7
 
8
-	public function process(&$article) {
8
+    public function process(&$article) {
9 9
 
10
-		if (strpos($article["link"], "threewordphrase.com") !== false) {
10
+        if (strpos($article["link"], "threewordphrase.com") !== false) {
11 11
 
12
-				$doc = new DOMDocument();
12
+                $doc = new DOMDocument();
13 13
 
14
-				if (@$doc->loadHTML(fetch_file_contents($article["link"]))) {
15
-					$xpath = new DOMXpath($doc);
14
+                if (@$doc->loadHTML(fetch_file_contents($article["link"]))) {
15
+                    $xpath = new DOMXpath($doc);
16 16
 
17
-					$basenode = $xpath->query("//td/center/img")->item(0);
17
+                    $basenode = $xpath->query("//td/center/img")->item(0);
18 18
 
19
-					if ($basenode) {
20
-						$article["content"] = $doc->saveHTML($basenode);
21
-					}
22
-				}
19
+                    if ($basenode) {
20
+                        $article["content"] = $doc->saveHTML($basenode);
21
+                    }
22
+                }
23 23
 
24
-			return true;
25
-		}
24
+            return true;
25
+        }
26 26
 
27
-		return false;
28
-	}
27
+        return false;
28
+    }
29 29
 }
Please login to merge, or discard this patch.
plugins/af_comics/filters/af_comics_darklegacy.php 1 patch
Indentation   +23 added lines, -23 removed lines patch added patch discarded remove patch
@@ -1,38 +1,38 @@
 block discarded – undo
1 1
 <?php
2 2
 class Af_Comics_DarkLegacy extends Af_ComicFilter {
3 3
 
4
-	public function supported() {
5
-		return array("Dark Legacy Comics");
6
-	}
4
+    public function supported() {
5
+        return array("Dark Legacy Comics");
6
+    }
7 7
 
8
-	public function process(&$article) {
8
+    public function process(&$article) {
9 9
 
10
-		if (strpos($article["guid"], "darklegacycomics.com") !== false) {
10
+        if (strpos($article["guid"], "darklegacycomics.com") !== false) {
11 11
 
12
-				$res = fetch_file_contents($article["link"], false, false, false,
13
-					 false, false, 0,
14
-					 "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)");
12
+                $res = fetch_file_contents($article["link"], false, false, false,
13
+                        false, false, 0,
14
+                        "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)");
15 15
 
16
-				global $fetch_last_error_content;
16
+                global $fetch_last_error_content;
17 17
 
18
-				if (!$res && $fetch_last_error_content)
19
-					$res = $fetch_last_error_content;
18
+                if (!$res && $fetch_last_error_content)
19
+                    $res = $fetch_last_error_content;
20 20
 
21
-				$doc = new DOMDocument();
21
+                $doc = new DOMDocument();
22 22
 
23
-				if (@$doc->loadHTML($res)) {
24
-					$xpath = new DOMXPath($doc);
25
-					$basenode = $xpath->query('//div[@class="comic"]')->item(0);
23
+                if (@$doc->loadHTML($res)) {
24
+                    $xpath = new DOMXPath($doc);
25
+                    $basenode = $xpath->query('//div[@class="comic"]')->item(0);
26 26
 
27
-					if ($basenode) {
27
+                    if ($basenode) {
28 28
 
29
-						$article["content"] = $doc->saveHTML($basenode);
30
-					}
31
-				}
29
+                        $article["content"] = $doc->saveHTML($basenode);
30
+                    }
31
+                }
32 32
 
33
-			 return true;
34
-		}
33
+                return true;
34
+        }
35 35
 
36
-		return false;
37
-	}
36
+        return false;
37
+    }
38 38
 }
Please login to merge, or discard this patch.