static function remove($feed_id, $owner_uid, $is_cat = false) {
+ $feed_id = (int) $feed_id;
+
if (!$is_cat) {
$table = "ttrss_counters_cache";
} else {
static function find($feed_id, $owner_uid, $is_cat = false,
$no_update = false) {
- if (!is_numeric($feed_id)) return;
+ // "" (null) is valid and should be cast to 0 (uncategorized)
+ // everything else i.e. tags are not
+ if (!is_numeric($feed_id) && $feed_id)
+ return;
+
+ $feed_id = (int) $feed_id;
if (!$is_cat) {
$table = "ttrss_counters_cache";
static function update($feed_id, $owner_uid, $is_cat = false,
$update_pcat = true, $pcat_fast = false) {
- if (!is_numeric($feed_id)) return;
+ // "" (null) is valid and should be cast to 0 (uncategorized)
+ // everything else i.e. tags are not
+ if (!is_numeric($feed_id) && $feed_id)
+ return;
+
+ $feed_id = (int) $feed_id;
$prev_unread = CCache::find($feed_id, $owner_uid, $is_cat, true);
if (!$pcat_fast) {
$sth = $pdo->prepare("SELECT id FROM ttrss_feeds
- WHERE owner_uid = :uid AND cat_id = :cat OR (:cat = 0 AND cat_id IS NULL)");
+ WHERE owner_uid = :uid AND
+ (cat_id = :cat OR (:cat = 0 AND cat_id IS NULL))");
$sth->execute([":uid" => $owner_uid, ":cat" => $feed_id]);
while ($line = $sth->fetch()) {
- CCache::update($line["id"], $owner_uid, false, false);
+ CCache::update((int)$line["id"], $owner_uid, false, false);
}
}
$sth = $pdo->prepare("SELECT SUM(value) AS sv
FROM ttrss_counters_cache, ttrss_feeds
- WHERE id = feed_id AND
- cat_id = :cat OR (:cat IS NULL AND cat_id IS NULL) AND
+ WHERE id = feed_id AND
+ (cat_id = :cat OR (:cat = 0 AND cat_id IS NULL)) AND
ttrss_counters_cache.owner_uid = :uid AND
ttrss_feeds.owner_uid = :uid");
$sth->execute([":uid" => $owner_uid, ":cat" => $feed_id]);
$unread = (int) Feeds::getFeedArticles($feed_id, $is_cat, true, $owner_uid);
}
- $pdo->beginTransaction();
+ $tr_in_progress = false;
+
+ try {
+ $pdo->beginTransaction();
+ } catch (Exception $e) {
+ $tr_in_progress = true;
+ }
$sth = $pdo->prepare("SELECT feed_id FROM $table
WHERE owner_uid = ? AND feed_id = ? LIMIT 1");
$sth->execute([$feed_id, $unread, $owner_uid]);
}
- $pdo->commit();
+ if (!$tr_in_progress) $pdo->commit();
if ($feed_id > 0 && $prev_unread != $unread) {
$sth->execute([$owner_uid, $feed_id]);
if ($row = $sth->fetch()) {
- CCache::update($row["cat_id"], $owner_uid, true, true, true);
+ CCache::update((int)$row["cat_id"], $owner_uid, true, true, true);
}
}
}