diff options
-rw-r--r-- | classes/feeds.php | 2 | ||||
-rw-r--r-- | include/functions.php | 14 | ||||
-rw-r--r-- | include/rssfuncs.php | 41 | ||||
-rw-r--r-- | schema/ttrss_schema_mysql.sql | 5 | ||||
-rw-r--r-- | schema/ttrss_schema_pgsql.sql | 5 | ||||
-rw-r--r-- | schema/versions/mysql/98.sql | 7 | ||||
-rw-r--r-- | schema/versions/pgsql/98.sql | 7 |
7 files changed, 72 insertions, 9 deletions
diff --git a/classes/feeds.php b/classes/feeds.php index 8dad16584..ed33b30c0 100644 --- a/classes/feeds.php +++ b/classes/feeds.php @@ -162,7 +162,7 @@ class Feeds extends Handler_Protected { $last_updated = strtotime(db_fetch_result($result, 0, "last_updated"));
$cache_images = sql_bool_to_bool(db_fetch_result($result, 0, "cache_images"));
- if (!$cache_images && time() - $last_updated > 120) {
+ if (!$cache_images && time() - $last_updated > 120 || isset($_REQUEST['DevForceUpdate'])) {
include "rssfuncs.php";
update_rss_feed($this->link, $feed, true, true);
}
diff --git a/include/functions.php b/include/functions.php index 2e230c3c6..4d7f61a2b 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1,6 +1,6 @@ <?php define('EXPECTED_CONFIG_VERSION', 26); - define('SCHEMA_VERSION', 97); + define('SCHEMA_VERSION', 98); $fetch_last_error = false; @@ -3923,6 +3923,18 @@ } } + function get_all_labels($link, $owner_uid) { + $rv = array(); + + $result = db_query($link, "SELECT fg_color, bg_color, caption FROM ttrss_labels2 WHERE owner_uid = " . $owner_uid); + + while ($line = db_fetch_assoc($result)) { + array_push($rv, $line); + } + + return $rv; + } + function label_update_cache($link, $id, $labels = false, $force = false) { if ($force) diff --git a/include/rssfuncs.php b/include/rssfuncs.php index 73323ea31..1e2feb3cb 100644 --- a/include/rssfuncs.php +++ b/include/rssfuncs.php @@ -405,10 +405,11 @@ } if ($debug_enabled) { - _debug("update_rss_feed: loading filters..."); + _debug("update_rss_feed: loading filters & labels..."); } $filters = load_filters($link, $feed, $owner_uid); + $labels = get_all_labels($link, $owner_uid); if ($debug_enabled) { //print_r($filters); @@ -874,6 +875,8 @@ } } + $article_labels = get_article_labels($link, $entry_ref_id); + if (find_article_filter($article_filters, "filter")) { db_query($link, "COMMIT"); // close transaction in progress continue; @@ -1034,7 +1037,7 @@ } assign_article_to_label_filters($link, $entry_ref_id, $article_filters, - $owner_uid); + $owner_uid, $article_labels); if ($debug_enabled) { _debug("update_rss_feed: looking for enclosures..."); @@ -1207,6 +1210,22 @@ db_query($link, "COMMIT"); } + if (get_pref($link, "AUTO_ASSIGN_LABELS", $owner_uid, false)) { + if ($debug_enabled) { + _debug("update_rss_feed: auto-assigning labels..."); + } + + foreach ($labels as $label) { + $caption = $label["caption"]; + + if (preg_match("/\b$caption\b/i", "$tags_str $entry_content $entry_title")) { + if (!labels_contains_caption($article_labels, $caption)) { + label_add_article($link, $entry_ref_id, $caption, $owner_uid); + } + } + } + } + if ($debug_enabled) { _debug("update_rss_feed: article processed"); } @@ -1437,11 +1456,23 @@ return $score; } - function assign_article_to_label_filters($link, $id, $filters, $owner_uid) { + function labels_contains_caption($labels, $caption) { + foreach ($labels as $label) { + if ($label[1] == $caption) { + return true; + } + } + + return false; + } + + function assign_article_to_label_filters($link, $id, $filters, $owner_uid, $article_labels) { foreach ($filters as $f) { if ($f["type"] == "label") { - label_add_article($link, $id, $f["param"], $owner_uid); - }; + if (!labels_contains_caption($article_labels, $f["param"])) { + label_add_article($link, $id, $f["param"], $owner_uid); + } + } } } ?> diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql index 8ac8611c9..4b2a3369d 100644 --- a/schema/ttrss_schema_mysql.sql +++ b/schema/ttrss_schema_mysql.sql @@ -306,7 +306,7 @@ create table ttrss_tags (id integer primary key auto_increment, create table ttrss_version (schema_version int not null) ENGINE=InnoDB DEFAULT CHARSET=UTF8; -insert into ttrss_version values (97); +insert into ttrss_version values (98); create table ttrss_enclosures (id integer primary key auto_increment, content_url text not null, @@ -448,12 +448,15 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_DEFAULT_INCLUDE_CHILDREN', 1, 'false', '', 1); +insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('AUTO_ASSIGN_LABELS', 1, 'true', 'Assign articles to labels automatically', 3); + update ttrss_prefs set access_level = 1 where pref_name in ('ON_CATCHUP_SHOW_NEXT_FEED', 'SORT_HEADLINES_BY_FEED_DATE', 'VFEED_GROUP_BY_FEED', 'FRESH_ARTICLE_MAX_AGE', 'CDM_EXPANDED', 'SHOW_CONTENT_PREVIEW', + 'AUTO_ASSIGN_LABELS', 'HIDE_READ_SHOWS_SPECIAL'); create table ttrss_user_prefs ( diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql index 377261dfa..a8a769315 100644 --- a/schema/ttrss_schema_pgsql.sql +++ b/schema/ttrss_schema_pgsql.sql @@ -254,7 +254,7 @@ create index ttrss_tags_post_int_id_idx on ttrss_tags(post_int_id); create table ttrss_version (schema_version int not null); -insert into ttrss_version values (97); +insert into ttrss_version values (98); create table ttrss_enclosures (id serial not null primary key, content_url text not null, @@ -388,12 +388,15 @@ insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) valu insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('_DEFAULT_INCLUDE_CHILDREN', 1, 'false', '', 1); +insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id) values('AUTO_ASSIGN_LABELS', 1, 'true', 'Assign articles to labels automatically', 3); + update ttrss_prefs set access_level = 1 where pref_name in ('ON_CATCHUP_SHOW_NEXT_FEED', 'SORT_HEADLINES_BY_FEED_DATE', 'VFEED_GROUP_BY_FEED', 'FRESH_ARTICLE_MAX_AGE', 'CDM_EXPANDED', 'SHOW_CONTENT_PREVIEW', + 'AUTO_ASSIGN_LABELS', 'HIDE_READ_SHOWS_SPECIAL'); create table ttrss_user_prefs ( diff --git a/schema/versions/mysql/98.sql b/schema/versions/mysql/98.sql new file mode 100644 index 000000000..1984a4325 --- /dev/null +++ b/schema/versions/mysql/98.sql @@ -0,0 +1,7 @@ +begin; + +insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,access_level) values('AUTO_ASSIGN_LABELS', 1, 'true', 'Assign articles to labels automatically', 3, 1); + +update ttrss_version set schema_version = 98; + +commit; diff --git a/schema/versions/pgsql/98.sql b/schema/versions/pgsql/98.sql new file mode 100644 index 000000000..1984a4325 --- /dev/null +++ b/schema/versions/pgsql/98.sql @@ -0,0 +1,7 @@ +begin; + +insert into ttrss_prefs (pref_name,type_id,def_value,short_desc,section_id,access_level) values('AUTO_ASSIGN_LABELS', 1, 'true', 'Assign articles to labels automatically', 3, 1); + +update ttrss_version set schema_version = 98; + +commit; |