From eb36b4eb5526fca5ea05b635d828e290687b4ea3 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 9 Sep 2005 05:52:36 +0100 Subject: [PATCH] start work on support for technorati tags, schema uses cascade deletes for pgsql --- backend.php | 3 --- functions.php | 41 ++++++++++++++++++++++++++++++++--- schema/ttrss_schema_mysql.sql | 5 +++++ schema/ttrss_schema_pgsql.sql | 7 +++++- 4 files changed, 49 insertions(+), 7 deletions(-) diff --git a/backend.php b/backend.php index 3442b862e..19020ac80 100644 --- a/backend.php +++ b/backend.php @@ -668,10 +668,7 @@ $ids = split(",", $_GET["ids"]); foreach ($ids as $id) { - db_query($link, "BEGIN"); - db_query($link, "DELETE FROM ttrss_entries WHERE feed_id = '$id'"); db_query($link, "DELETE FROM ttrss_feeds WHERE id = '$id'"); - db_query($link, "COMMIT"); if (file_exists(ICONS_DIR . "/$id.ico")) { unlink(ICONS_DIR . "/$id.ico"); diff --git a/functions.php b/functions.php index c032364d7..f4628a812 100644 --- a/functions.php +++ b/functions.php @@ -269,11 +269,46 @@ $result = db_query($link, $query); } } + + /* taaaags */ + // , // + + $entry_tags = null; + + preg_match_all("/([^>]+)<\/a>/i", $entry_content, + $entry_tags); + + $entry_tags = $entry_tags[1]; + + if (count($entry_tags) > 0) { + + $result = db_query($link, "SELECT id FROM ttrss_entries + WHERE guid = '$entry_guid'"); + + if (!$result || db_num_rows($result) != 1) { + return; + } + + $entry_id = db_fetch_result($result, 0, "id"); + + foreach ($entry_tags as $tag) { + $tag = db_escape_string(strtolower($tag)); + + $result = db_query($link, "SELECT id FROM ttrss_tags + WHERE tag_name = '$tag' AND post_id = '$entry_id' LIMIT 1"); + + if ($result && db_num_rows($result) == 0) { + +// print "tagging $entry_id as $tag
"; + + db_query($link, "INSERT INTO ttrss_tags (tag_name,post_id) + VALUES ('$tag', '$entry_id')"); + } + } + } } - if ($result) { - $result = db_query($link, "UPDATE ttrss_feeds SET last_updated = NOW()"); - } + db_query($link, "UPDATE ttrss_feeds SET last_updated = NOW()"); } diff --git a/schema/ttrss_schema_mysql.sql b/schema/ttrss_schema_mysql.sql index ae736cb6f..877421920 100644 --- a/schema/ttrss_schema_mysql.sql +++ b/schema/ttrss_schema_mysql.sql @@ -1,3 +1,4 @@ +drop table if exists ttrss_tags; drop table if exists ttrss_entries; drop table if exists ttrss_feeds; @@ -69,3 +70,7 @@ create table ttrss_labels (id integer primary key auto_increment, insert into ttrss_labels (sql_exp,description) values ('unread = true', 'Unread articles'); +create table ttrss_tags (id integer primary key auto_increment, + tag_name varchar(250) not null, + post_id integer references ttrss_entries(id)) TYPE=InnoDB; + diff --git a/schema/ttrss_schema_pgsql.sql b/schema/ttrss_schema_pgsql.sql index 31183173b..3c084996f 100644 --- a/schema/ttrss_schema_pgsql.sql +++ b/schema/ttrss_schema_pgsql.sql @@ -1,3 +1,4 @@ +drop table ttrss_tags; drop table ttrss_entries; drop table ttrss_feeds; @@ -28,7 +29,7 @@ insert into ttrss_feeds (title,feed_url) values ('Technocrat.net', 'http://syndication.technocrat.net/rss'); create table ttrss_entries (id serial not null primary key, - feed_id int references ttrss_feeds(id) not null, + feed_id int references ttrss_feeds(id) ON DELETE CASCADE not null, updated timestamp not null, title varchar(250) not null, guid varchar(300) not null unique, @@ -68,3 +69,7 @@ create table ttrss_labels (id serial primary key, insert into ttrss_labels (sql_exp,description) values ('unread = true', 'Unread articles'); +create table ttrss_tags (id serial primary key, + tag_name varchar(250) not null, + post_id integer references ttrss_entries(id) ON DELETE CASCADE not null); +