filters:
* add filter action to ignore feed-provided tags * simplify handling of various filter-provided tags * bump schema to 146
This commit is contained in:
parent
92747b1d21
commit
40b2356be2
|
@ -6,7 +6,7 @@ class Config {
|
||||||
const T_STRING = 2;
|
const T_STRING = 2;
|
||||||
const T_INT = 3;
|
const T_INT = 3;
|
||||||
|
|
||||||
const SCHEMA_VERSION = 145;
|
const SCHEMA_VERSION = 146;
|
||||||
|
|
||||||
/** override default values, defined below in _DEFAULTS[], prefixing with _ENVVAR_PREFIX:
|
/** override default values, defined below in _DEFAULTS[], prefixing with _ENVVAR_PREFIX:
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
class Pref_Filters extends Handler_Protected {
|
class Pref_Filters extends Handler_Protected {
|
||||||
|
|
||||||
|
const ACTION_TAG = 4;
|
||||||
|
const ACTION_SCORE = 6;
|
||||||
|
const ACTION_LABEL = 7;
|
||||||
|
const ACTION_PLUGIN = 9;
|
||||||
|
const ACTION_REMOVE_TAG = 10;
|
||||||
|
|
||||||
|
const PARAM_ACTIONS = [self::ACTION_TAG, self::ACTION_SCORE,
|
||||||
|
self::ACTION_LABEL, self::ACTION_PLUGIN, self::ACTION_REMOVE_TAG];
|
||||||
|
|
||||||
function csrf_ignore(string $method): bool {
|
function csrf_ignore(string $method): bool {
|
||||||
$csrf_ignored = array("index", "getfiltertree", "savefilterorder");
|
$csrf_ignored = array("index", "getfiltertree", "savefilterorder");
|
||||||
|
|
||||||
|
@ -274,7 +283,7 @@ class Pref_Filters extends Handler_Protected {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($line['action_id'] == 7) {
|
if ($line['action_id'] == self::ACTION_LABEL) {
|
||||||
$label_sth = $this->pdo->prepare("SELECT fg_color, bg_color
|
$label_sth = $this->pdo->prepare("SELECT fg_color, bg_color
|
||||||
FROM ttrss_labels2 WHERE caption = ? AND
|
FROM ttrss_labels2 WHERE caption = ? AND
|
||||||
owner_uid = ?");
|
owner_uid = ?");
|
||||||
|
@ -474,11 +483,7 @@ class Pref_Filters extends Handler_Protected {
|
||||||
|
|
||||||
$title = __($row["description"]);
|
$title = __($row["description"]);
|
||||||
|
|
||||||
if ($action["action_id"] == 4 || $action["action_id"] == 6 ||
|
if ($action["action_id"] == self::ACTION_PLUGIN) {
|
||||||
$action["action_id"] == 7)
|
|
||||||
$title .= ": " . $action["action_param"];
|
|
||||||
|
|
||||||
if ($action["action_id"] == 9) {
|
|
||||||
list ($pfclass, $pfaction) = explode(":", $action["action_param"]);
|
list ($pfclass, $pfaction) = explode(":", $action["action_param"]);
|
||||||
|
|
||||||
$filter_actions = PluginHost::getInstance()->get_filter_actions();
|
$filter_actions = PluginHost::getInstance()->get_filter_actions();
|
||||||
|
@ -491,6 +496,8 @@ class Pref_Filters extends Handler_Protected {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (in_array($action["action_id"], self::PARAM_ACTIONS)) {
|
||||||
|
$title .= ": " . $action["action_param"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,14 +603,19 @@ class Pref_Filters extends Handler_Protected {
|
||||||
$action_param = $action["action_param"];
|
$action_param = $action["action_param"];
|
||||||
$action_param_label = $action["action_param_label"];
|
$action_param_label = $action["action_param_label"];
|
||||||
|
|
||||||
if ($action_id == 7) {
|
if ($action_id == self::ACTION_LABEL) {
|
||||||
$action_param = $action_param_label;
|
$action_param = $action_param_label;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($action_id == 6) {
|
if ($action_id == self::ACTION_SCORE) {
|
||||||
$action_param = (int)str_replace("+", "", $action_param);
|
$action_param = (int)str_replace("+", "", $action_param);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in_array($action_id, [self::ACTION_TAG, self::ACTION_REMOVE_TAG])) {
|
||||||
|
$action_param = implode(", ", FeedItem_Common::normalize_categories(
|
||||||
|
explode(",", $action_param)));
|
||||||
|
}
|
||||||
|
|
||||||
$asth->execute([$filter_id, $action_id, $action_param]);
|
$asth->execute([$filter_id, $action_id, $action_param]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1164,32 +1164,30 @@ class RSSUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for manual tags (we have to do it here since they're loaded from filters)
|
// check for manual tags (we have to do it here since they're loaded from filters)
|
||||||
|
|
||||||
foreach ($article_filters as $f) {
|
foreach ($article_filters as $f) {
|
||||||
if ($f["type"] == "tag") {
|
if ($f["type"] == "tag") {
|
||||||
|
$entry_tags = array_merge($entry_tags,
|
||||||
$manual_tags = array_map('trim', explode(",", mb_strtolower($f["param"])));
|
FeedItem_Common::normalize_categories(explode(",", $f["param"])));
|
||||||
|
|
||||||
foreach ($manual_tags as $tag) {
|
|
||||||
array_push($entry_tags, $tag);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// like boring tags, but filter-based
|
||||||
|
foreach ($article_filters as $f) {
|
||||||
|
if ($f["type"] == "ignore-tag") {
|
||||||
|
$entry_tags = array_diff($entry_tags,
|
||||||
|
FeedItem_Common::normalize_categories(explode(",", $f["param"])));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip boring tags
|
// Skip boring tags
|
||||||
|
|
||||||
$boring_tags = array_map('trim',
|
|
||||||
explode(",", mb_strtolower(
|
|
||||||
get_pref(Prefs::BLACKLISTED_TAGS, $feed_obj->owner_uid))));
|
|
||||||
|
|
||||||
$entry_tags = FeedItem_Common::normalize_categories(
|
$entry_tags = FeedItem_Common::normalize_categories(
|
||||||
array_unique(
|
array_diff($entry_tags,
|
||||||
array_diff($entry_tags, $boring_tags)));
|
FeedItem_Common::normalize_categories(explode(",",
|
||||||
|
get_pref(Prefs::BLACKLISTED_TAGS, $feed_obj->owner_uid)))));
|
||||||
|
|
||||||
Debug::log("filtered tags: " . implode(", ", $entry_tags), Debug::LOG_VERBOSE);
|
Debug::log("resulting article tags: " . implode(", ", $entry_tags), Debug::LOG_VERBOSE);
|
||||||
|
|
||||||
// Save article tags in the database
|
// Save article tags in the database
|
||||||
|
|
||||||
if (count($entry_tags) > 0) {
|
if (count($entry_tags) > 0) {
|
||||||
|
|
||||||
$tsth = $pdo->prepare("SELECT id FROM ttrss_tags
|
$tsth = $pdo->prepare("SELECT id FROM ttrss_tags
|
||||||
|
|
|
@ -16,7 +16,8 @@ const Filters = {
|
||||||
ACTION_SCORE: 6,
|
ACTION_SCORE: 6,
|
||||||
ACTION_LABEL: 7,
|
ACTION_LABEL: 7,
|
||||||
ACTION_PLUGIN: 9,
|
ACTION_PLUGIN: 9,
|
||||||
PARAM_ACTIONS: [4, 6, 7, 9],
|
ACTION_REMOVE_TAG: 10,
|
||||||
|
PARAM_ACTIONS: [4, 6, 7, 9, 10],
|
||||||
filter_info: {},
|
filter_info: {},
|
||||||
test: function() {
|
test: function() {
|
||||||
const test_dialog = new fox.SingleUseDialog({
|
const test_dialog = new fox.SingleUseDialog({
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
insert into ttrss_filter_actions (id,name,description) values (10, 'ignore-tag',
|
||||||
|
'Ignore tags');
|
|
@ -249,6 +249,9 @@ insert into ttrss_filter_actions (id,name,description) values (8, 'stop',
|
||||||
insert into ttrss_filter_actions (id,name,description) values (9, 'plugin',
|
insert into ttrss_filter_actions (id,name,description) values (9, 'plugin',
|
||||||
'Invoke plugin');
|
'Invoke plugin');
|
||||||
|
|
||||||
|
insert into ttrss_filter_actions (id,name,description) values (10, 'ignore-tag',
|
||||||
|
'Ignore tags');
|
||||||
|
|
||||||
create table ttrss_filters2(id integer primary key auto_increment,
|
create table ttrss_filters2(id integer primary key auto_increment,
|
||||||
owner_uid integer not null,
|
owner_uid integer not null,
|
||||||
match_any_rule boolean not null default false,
|
match_any_rule boolean not null default false,
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
insert into ttrss_filter_actions (id,name,description) values (10, 'ignore-tag',
|
||||||
|
'Ignore tags');
|
|
@ -245,6 +245,9 @@ insert into ttrss_filter_actions (id,name,description) values (8, 'stop',
|
||||||
insert into ttrss_filter_actions (id,name,description) values (9, 'plugin',
|
insert into ttrss_filter_actions (id,name,description) values (9, 'plugin',
|
||||||
'Invoke plugin');
|
'Invoke plugin');
|
||||||
|
|
||||||
|
insert into ttrss_filter_actions (id,name,description) values (10, 'ignore-tag',
|
||||||
|
'Ignore tags');
|
||||||
|
|
||||||
create table ttrss_filters2(id serial not null primary key,
|
create table ttrss_filters2(id serial not null primary key,
|
||||||
owner_uid integer not null references ttrss_users(id) on delete cascade,
|
owner_uid integer not null references ttrss_users(id) on delete cascade,
|
||||||
match_any_rule boolean not null default false,
|
match_any_rule boolean not null default false,
|
||||||
|
|
Loading…
Reference in New Issue