<?php
- define('EXPECTED_CONFIG_VERSION', 25);
- define('SCHEMA_VERSION', 94);
+ define('EXPECTED_CONFIG_VERSION', 26);
+ define('SCHEMA_VERSION', 97);
+
+ $fetch_last_error = false;
function __autoload($class) {
- $file = dirname(__FILE__)."/../classes/".strtolower(basename($class)).".php";
+ $class_file = str_replace("_", "/", strtolower(basename($class)));
+
+ $file = dirname(__FILE__)."/../classes/$class_file.php";
+
if (file_exists($file)) {
require $file;
}
$login = urlencode($login);
$pass = urlencode($pass);
+ global $fetch_last_error;
+
if (function_exists('curl_init') && !ini_get("open_basedir")) {
$ch = curl_init($url);
$contents = @curl_exec($ch);
if ($contents === false) {
+ $fetch_last_error = curl_error($ch);
curl_close($ch);
return false;
}
}
}
- return @file_get_contents($url);
+ $data = @file_get_contents($url);
+
+ if (!$data && function_exists('error_get_last')) {
+ $error = error_get_last();
+ $fetch_last_error = $error["message"];
+ }
+ return $data;
}
}
function get_article_filters($filters, $title, $content, $link, $timestamp, $author, $tags) {
$matches = array();
- if ($filters["title"]) {
- foreach ($filters["title"] as $filter) {
- $reg_exp = $filter["reg_exp"];
- $inverse = $filter["inverse"];
- if ((!$inverse && @preg_match("/$reg_exp/i", $title)) ||
- ($inverse && !@preg_match("/$reg_exp/i", $title))) {
+ foreach ($filters as $filter) {
+ $match_any_rule = $filter["match_any_rule"];
+ $filter_match = false;
- array_push($matches, array($filter["action"], $filter["action_param"]));
- }
- }
- }
+ foreach ($filter["rules"] as $rule) {
+ $match = false;
+ $reg_exp = $rule["reg_exp"];
- if ($filters["content"]) {
- foreach ($filters["content"] as $filter) {
- $reg_exp = $filter["reg_exp"];
- $inverse = $filter["inverse"];
+ if (!$reg_exp)
+ continue;
- if ((!$inverse && @preg_match("/$reg_exp/i", $content)) ||
- ($inverse && !@preg_match("/$reg_exp/i", $content))) {
-
- array_push($matches, array($filter["action"], $filter["action_param"]));
+ switch ($rule["type"]) {
+ case "title":
+ $match = @preg_match("/$reg_exp/i", $title);
+ break;
+ case "content":
+ $match = @preg_match("/$reg_exp/i", $content);
+ break;
+ case "both":
+ $match = (@preg_match("/$reg_exp/i", $title) || @preg_match("/$reg_exp/i", $title));
+ break;
+ case "link":
+ $match = @preg_match("/$reg_exp/i", $link);
+ break;
+ case "author":
+ $match = @preg_match("/$reg_exp/i", $author);
+ break;
+ case "tag":
+ $tag_string = join(",", $tags);
+ $match = @preg_match("/$reg_exp/i", $tag_string);
+ break;
}
- }
- }
-
- if ($filters["both"]) {
- foreach ($filters["both"] as $filter) {
- $reg_exp = $filter["reg_exp"];
- $inverse = $filter["inverse"];
- if ($inverse) {
- if (!@preg_match("/$reg_exp/i", $title) && !preg_match("/$reg_exp/i", $content)) {
- array_push($matches, array($filter["action"], $filter["action_param"]));
+ if ($match_any_rule) {
+ if ($match) {
+ $filter_match = true;
+ break;
}
} else {
- if (@preg_match("/$reg_exp/i", $title) || preg_match("/$reg_exp/i", $content)) {
- array_push($matches, array($filter["action"], $filter["action_param"]));
+ $filter_match = $match;
+ if (!$match) {
+ break;
}
}
}
- }
-
- if ($filters["link"]) {
- $reg_exp = $filter["reg_exp"];
- foreach ($filters["link"] as $filter) {
- $reg_exp = $filter["reg_exp"];
- $inverse = $filter["inverse"];
-
- if ((!$inverse && @preg_match("/$reg_exp/i", $link)) ||
- ($inverse && !@preg_match("/$reg_exp/i", $link))) {
-
- array_push($matches, array($filter["action"], $filter["action_param"]));
- }
- }
- }
-
- if ($filters["date"]) {
- $reg_exp = $filter["reg_exp"];
- foreach ($filters["date"] as $filter) {
- $date_modifier = $filter["filter_param"];
- $inverse = $filter["inverse"];
- $check_timestamp = strtotime($filter["reg_exp"]);
-
- # no-op when timestamp doesn't parse to prevent misfires
-
- if ($check_timestamp) {
- $match_ok = false;
-
- if ($date_modifier == "before" && $timestamp < $check_timestamp ||
- $date_modifier == "after" && $timestamp > $check_timestamp) {
- $match_ok = true;
- }
-
- if ($inverse) $match_ok = !$match_ok;
-
- if ($match_ok) {
- array_push($matches, array($filter["action"], $filter["action_param"]));
- }
- }
- }
- }
-
- if ($filters["author"]) {
- foreach ($filters["author"] as $filter) {
- $reg_exp = $filter["reg_exp"];
- $inverse = $filter["inverse"];
- if ((!$inverse && @preg_match("/$reg_exp/i", $author)) ||
- ($inverse && !@preg_match("/$reg_exp/i", $author))) {
-
- array_push($matches, array($filter["action"], $filter["action_param"]));
- }
- }
- }
-
- if ($filters["tag"]) {
-
- $tag_string = join(",", $tags);
-
- foreach ($filters["tag"] as $filter) {
- $reg_exp = $filter["reg_exp"];
- $inverse = $filter["inverse"];
-
- if ((!$inverse && @preg_match("/$reg_exp/i", $tag_string)) ||
- ($inverse && !@preg_match("/$reg_exp/i", $tag_string))) {
- array_push($matches, array($filter["action"], $filter["action_param"]));
+ if ($filter_match) {
+ foreach ($filter["actions"] AS $action) {
+ array_push($matches, $action);
}
}
}
-
return $matches;
}
function find_article_filter($filters, $filter_name) {
foreach ($filters as $f) {
- if ($f[0] == $filter_name) {
+ if ($f["type"] == $filter_name) {
return $f;
};
}
return false;
}
+ function find_article_filters($filters, $filter_name) {
+ $results = array();
+
+ foreach ($filters as $f) {
+ if ($f["type"] == $filter_name) {
+ array_push($results, $f);
+ };
+ }
+ return $results;
+ }
+
function calculate_article_score($filters) {
$score = 0;
foreach ($filters as $f) {
- if ($f[0] == "score") {
- $score += $f[1];
+ if ($f["type"] == "score") {
+ $score += $f["param"];
};
}
return $score;
function assign_article_to_labels($link, $id, $filters, $owner_uid) {
foreach ($filters as $f) {
- if ($f[0] == "label") {
- label_add_article($link, $id, $f[1], $owner_uid);
+ if ($f["type"] == "label") {
+ label_add_article($link, $id, $f["param"], $owner_uid);
};
}
}
$user_id = (int) $authenticator->authenticate($login, $password);
- if ($user_id) break;
+ if ($user_id) {
+ $_SESSION["auth_module"] = $module;
+ break;
+ }
} else {
print T_sprintf("Fatal: authentication module %s not found.", $module);
$_SESSION["hide_hello"] = true;
$_SESSION["hide_logout"] = true;
+ $_SESSION["auth_module"] = false;
+
if (!$_SESSION["csrf_token"]) {
$_SESSION["csrf_token"] = sha1(uniqid(rand(), true));
}
if ($is_cat) {
return getCategoryUnread($link, $n_feed, $owner_uid);
- } if ($feed != "0" && $n_feed == 0) {
+ } else if ($n_feed == -6) {
+ return 0;
+ } else if ($feed != "0" && $n_feed == 0) {
$feed = db_escape_string($feed);
}
/**
- * @return integer Status code:
+ * @return array (code => Status code, message => error message if available)
+ *
* 0 - OK, Feed already exists
* 1 - OK, Feed added
* 2 - Invalid URL
function subscribe_to_feed($link, $url, $cat_id = 0,
$auth_login = '', $auth_pass = '', $need_auth = false) {
+ global $fetch_last_error;
+
require_once "include/rssfuncs.php";
$url = fix_url($url);
- if (!$url || !validate_feed_url($url)) return 2;
+ if (!$url || !validate_feed_url($url)) return array("code" => 2);
$update_method = 0;
$has_oauth = db_fetch_result($result, 0, 'twitter_oauth');
if (!$need_auth || !$has_oauth || strpos($url, '://api.twitter.com') === false) {
- if (!fetch_file_contents($url, false, $auth_login, $auth_pass)) return 5;
+ if (!fetch_file_contents($url, false, $auth_login, $auth_pass))
+ return array("code" => 5, "message" => $fetch_last_error);
if (url_is_html($url, $auth_login, $auth_pass)) {
$feedUrls = get_feeds_from_html($url, $auth_login, $auth_pass);
if (count($feedUrls) == 0) {
- return 3;
+ return array("code" => 3);
} else if (count($feedUrls) > 1) {
- return 4;
+ return array("code" => 4);
}
//use feed url as new URL
$url = key($feedUrls);
} else {
if (!fetch_twitter_rss($link, $url, $_SESSION['uid']))
- return 5;
+ return array("code" => 5);
$update_method = 3;
}
update_rss_feed($link, $feed_id, true);
}
- return 1;
+ return array("code" => 1);
} else {
- return 0;
+ return array("code" => 0);
}
}
function print_feed_select($link, $id, $default_id = "",
- $attributes = "", $include_all_feeds = true) {
+ $attributes = "", $include_all_feeds = true,
+ $root_id = false, $nest_level = 0) {
- print "<select id=\"$id\" name=\"$id\" $attributes>";
- if ($include_all_feeds) {
- print "<option value=\"0\">".__('All feeds')."</option>";
+ if (!$root_id) {
+ print "<select id=\"$id\" name=\"$id\" $attributes>";
+ if ($include_all_feeds) {
+ $is_selected = ("0" == $default_id) ? "selected=\"1\"" : "";
+ print "<option $is_selected value=\"0\">".__('All feeds')."</option>";
+ }
}
- $result = db_query($link, "SELECT id,title FROM ttrss_feeds
- WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title");
+ if (get_pref($link, 'ENABLE_FEED_CATS')) {
- if (db_num_rows($result) > 0 && $include_all_feeds) {
- print "<option disabled>--------</option>";
- }
+ if ($root_id)
+ $parent_qpart = "parent_cat = '$root_id'";
+ else
+ $parent_qpart = "parent_cat IS NULL";
- while ($line = db_fetch_assoc($result)) {
- if ($line["id"] == $default_id) {
- $is_selected = "selected=\"1\"";
- } else {
- $is_selected = "";
+ $result = db_query($link, "SELECT id,title,
+ (SELECT COUNT(id) FROM ttrss_feed_categories AS c2 WHERE
+ c2.parent_cat = ttrss_feed_categories.id) AS num_children
+ FROM ttrss_feed_categories
+ WHERE owner_uid = ".$_SESSION["uid"]." AND $parent_qpart ORDER BY title");
+
+ while ($line = db_fetch_assoc($result)) {
+
+ for ($i = 0; $i < $nest_level; $i++)
+ $line["title"] = " - " . $line["title"];
+
+ $is_selected = ("CAT:".$line["id"] == $default_id) ? "selected=\"1\"" : "";
+
+ printf("<option $is_selected value='CAT:%d'>%s</option>",
+ $line["id"], htmlspecialchars($line["title"]));
+
+ if ($line["num_children"] > 0)
+ print_feed_select($link, $id, $default_id, $attributes,
+ $include_all_feeds, $line["id"], $nest_level+1);
+
+ $feed_result = db_query($link, "SELECT id,title FROM ttrss_feeds
+ WHERE cat_id = '".$line["id"]."' AND owner_uid = ".$_SESSION["uid"] . " ORDER BY title");
+
+ while ($fline = db_fetch_assoc($feed_result)) {
+ $is_selected = ($fline["id"] == $default_id) ? "selected=\"1\"" : "";
+
+ $fline["title"] = " + " . $fline["title"];
+
+ for ($i = 0; $i < $nest_level; $i++)
+ $fline["title"] = " - " . $fline["title"];
+
+ printf("<option $is_selected value='%d'>%s</option>",
+ $fline["id"], htmlspecialchars($fline["title"]));
+ }
}
- $title = truncate_string(htmlspecialchars($line["title"]), 40);
+ if (!$root_id) {
+ $is_selected = ($default_id == "CAT:0") ? "selected=\"1\"" : "";
+
+ printf("<option $is_selected value='CAT:0'>%s</option>",
+ __("Uncategorized"));
+
+ $feed_result = db_query($link, "SELECT id,title FROM ttrss_feeds
+ WHERE cat_id IS NULL AND owner_uid = ".$_SESSION["uid"] . " ORDER BY title");
+
+ while ($fline = db_fetch_assoc($feed_result)) {
+ $is_selected = ($fline["id"] == $default_id && !$default_is_cat) ? "selected=\"1\"" : "";
+
+ $fline["title"] = " + " . $fline["title"];
+
+ for ($i = 0; $i < $nest_level; $i++)
+ $fline["title"] = " - " . $fline["title"];
+
+ printf("<option $is_selected value='%d'>%s</option>",
+ $fline["id"], htmlspecialchars($fline["title"]));
+ }
+ }
- printf("<option $is_selected value='%d'>%s</option>",
- $line["id"], $title);
+ } else {
+ $result = db_query($link, "SELECT id,title FROM ttrss_feeds
+ WHERE owner_uid = ".$_SESSION["uid"]." ORDER BY title");
+
+ while ($line = db_fetch_assoc($result)) {
+
+ $is_selected = ($line["id"] == $default_id) ? "selected=\"1\"" : "";
+
+ printf("<option $is_selected value='%d'>%s</option>",
+ $line["id"], htmlspecialchars($line["title"]));
+ }
}
- print "</select>";
+ if (!$root_id) {
+ print "</select>";
+ }
}
function print_feed_cat_select($link, $id, $default_id,
case -4:
return "images/tag.png";
break;
+ case -6:
+ return "images/recently_read.png";
+ break;
default:
if ($id < -10) {
return "images/label.png";
}
}
- function getFeedTitle($link, $id) {
- if ($id == -1) {
+ function getFeedTitle($link, $id, $cat = false) {
+ if ($cat) {
+ return getCategoryTitle($link, $id);
+ } else if ($id == -1) {
return __("Starred articles");
} else if ($id == -2) {
return __("Published articles");
return __("All articles");
} else if ($id === 0 || $id === "0") {
return __("Archived articles");
+ } else if ($id == -6) {
+ return __("Recently read");
} else if ($id < -10) {
$label_id = -$id - 11;
$result = db_query($link, "SELECT caption FROM ttrss_labels2 WHERE id = '$label_id'");
$data['new_version_available'] = (int) ($new_version_details != false);
$_SESSION["last_version_check"] = time();
+ $_SESSION["version_data"] = $new_version_details;
}
return $data;
}
if ($filter) {
- $filter_query_part = filter_to_sql($filter);
+
+ if (DB_TYPE == "pgsql") {
+ $query_strategy_part .= " AND updated > NOW() - INTERVAL '14 days' ";
+ } else {
+ $query_strategy_part .= " AND updated > DATE_SUB(NOW(), INTERVAL 14 DAY) ";
+ }
+
+ $override_order = "updated DESC";
+
+ $filter_query_part = filter_to_sql($filter) . " AND";
} else {
$filter_query_part = "";
}
$query_strategy_part = "ttrss_entries.id > 0";
$vfeed_query_part = "ttrss_feeds.title AS feed_title,";
/* tags */
- } else if (preg_match("/^-?[0-9][0-9]*$/", $feed) == false) {
+ } else if (!is_numeric($feed)) {
$query_strategy_part = "ttrss_entries.id > 0";
$vfeed_query_part = "(SELECT title FROM ttrss_feeds WHERE
id = feed_id) as feed_title,";
ttrss_user_labels2.article_id = ref_id";
}
-
+ } else if ($feed == -6) { // recently read
+ $query_strategy_part = "unread = false AND last_read IS NOT NULL";
+ $vfeed_query_part = "ttrss_feeds.title AS feed_title,";
+ $override_order = "last_read DESC";
} else if ($feed == -3) { // fresh virtual feed
$query_strategy_part = "unread = true AND score >= 0";
$content_query_part = "content as content_preview,";
- if (preg_match("/^-?[0-9][0-9]*$/", $feed) != false) {
+ if (is_numeric($feed)) {
if ($feed >= 0) {
$feed_kind = "Feeds";
}
function format_article($link, $id, $mark_as_read = true, $zoom_mode = false, $owner_uid = false) {
-
if (!$owner_uid) $owner_uid = $_SESSION["uid"];
$rv = array();
$button_plugins = explode(",", ARTICLE_BUTTON_PLUGINS);
foreach ($button_plugins as $p) {
- $pclass = trim("${p}_button");
+ $pclass = trim("button_${p}");
if (class_exists($pclass)) {
$plugin = new $pclass($link);
return $text;
}
- function load_filters($link, $feed, $owner_uid, $action_id = false) {
+ function load_filters($link, $feed_id, $owner_uid, $action_id = false) {
$filters = array();
+ $cat_id = (int)getFeedCategory($link, $feed_id);
- if ($action_id) $ftype_query_part = "action_id = '$action_id' AND";
-
- $result = db_query($link, "SELECT reg_exp,
- ttrss_filter_types.name AS name,
- ttrss_filter_actions.name AS action,
- inverse,
- action_param,
- filter_param
- FROM ttrss_filters
- LEFT JOIN ttrss_feeds ON (ttrss_feeds.id = '$feed'),
- ttrss_filter_types,ttrss_filter_actions
- WHERE
- enabled = true AND
- $ftype_query_part
- ttrss_filters.owner_uid = $owner_uid AND
- ttrss_filter_types.id = filter_type AND
- ttrss_filter_actions.id = action_id AND
- ((cat_filter = true AND ttrss_feeds.cat_id = ttrss_filters.cat_id) OR
- (cat_filter = true AND ttrss_feeds.cat_id IS NULL AND
- ttrss_filters.cat_id IS NULL) OR
- (cat_filter = false AND (feed_id IS NULL OR feed_id = '$feed')))
- ORDER BY reg_exp");
+ $result = db_query($link, "SELECT * FROM ttrss_filters2 WHERE
+ owner_uid = $owner_uid AND enabled = true");
while ($line = db_fetch_assoc($result)) {
+ $filter_id = $line["id"];
- if (!$filters[$line["name"]]) $filters[$line["name"]] = array();
- $filter["reg_exp"] = $line["reg_exp"];
- $filter["action"] = $line["action"];
- $filter["action_param"] = $line["action_param"];
- $filter["filter_param"] = $line["filter_param"];
- $filter["inverse"] = sql_bool_to_bool($line["inverse"]);
+ $result2 = db_query($link, "SELECT
+ r.reg_exp, r.feed_id, r.cat_id, r.cat_filter, t.name AS type_name
+ FROM ttrss_filters2_rules AS r,
+ ttrss_filter_types AS t
+ WHERE
+ (cat_id IS NULL OR cat_id = '$cat_id') AND
+ (feed_id IS NULL OR feed_id = '$feed_id') AND
+ filter_type = t.id AND filter_id = '$filter_id'");
- array_push($filters[$line["name"]], $filter);
+ $rules = array();
+ $actions = array();
+
+ while ($rule_line = db_fetch_assoc($result2)) {
+# print_r($rule_line);
+
+ $rule = array();
+ $rule["reg_exp"] = $rule_line["reg_exp"];
+ $rule["type"] = $rule_line["type_name"];
+
+ array_push($rules, $rule);
}
+ $result2 = db_query($link, "SELECT a.action_param,t.name AS type_name
+ FROM ttrss_filters2_actions AS a,
+ ttrss_filter_actions AS t
+ WHERE
+ action_id = t.id AND filter_id = '$filter_id'");
+
+ while ($action_line = db_fetch_assoc($result2)) {
+# print_r($action_line);
+
+ $action = array();
+ $action["type"] = $action_line["type_name"];
+ $action["param"] = $action_line["action_param"];
+
+ array_push($actions, $action);
+ }
+
+
+ $filter = array();
+ $filter["match_any_rule"] = sql_bool_to_bool($line["match_any_rule"]);
+ $filter["rules"] = $rules;
+ $filter["actions"] = $actions;
+
+ if (count($rules) > 0 && count($actions) > 0) {
+ array_push($filters, $filter);
+ }
+ }
return $filters;
}
}
}
- $rv .= "<div dojoType=\"dijit.form.DropDownButton\">".
+ $rv .= "<br/><div dojoType=\"dijit.form.DropDownButton\">".
"<span>" . __('Attachments')."</span>";
$rv .= "<div dojoType=\"dijit.Menu\" style=\"display: none;\">";
}
function filter_to_sql($filter) {
- $query = "";
-
- $regexp_valid = preg_match('/' . $filter['reg_exp'] . '/',
- $filter['reg_exp']) !== FALSE;
-
- if ($regexp_valid) {
-
- if (DB_TYPE == "pgsql")
- $reg_qpart = "~";
- else
- $reg_qpart = "REGEXP";
+ $query = array();
- switch ($filter["type"]) {
- case "title":
- $query = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
- $filter['reg_exp'] . "')";
- break;
- case "content":
- $query = "LOWER(ttrss_entries.content) $reg_qpart LOWER('".
- $filter['reg_exp'] . "')";
- break;
- case "both":
- $query = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
- $filter['reg_exp'] . "') OR LOWER(" .
- "ttrss_entries.content) $reg_qpart LOWER('" . $filter['reg_exp'] . "')";
- break;
- case "tag":
- $query = "LOWER(ttrss_user_entries.tag_cache) $reg_qpart LOWER('".
- $filter['reg_exp'] . "')";
- break;
- case "link":
- $query = "LOWER(ttrss_entries.link) $reg_qpart LOWER('".
- $filter['reg_exp'] . "')";
- break;
- case "date":
+ if (DB_TYPE == "pgsql")
+ $reg_qpart = "~";
+ else
+ $reg_qpart = "REGEXP";
+
+ foreach ($filter["rules"] AS $rule) {
+ $regexp_valid = preg_match('/' . $rule['reg_exp'] . '/',
+ $rule['reg_exp']) !== FALSE;
+
+ if ($regexp_valid) {
+
+ $rule['reg_exp'] = db_escape_string($rule['reg_exp']);
+
+ switch ($rule["type"]) {
+ case "title":
+ $qpart = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
+ $rule['reg_exp'] . "')";
+ break;
+ case "content":
+ $qpart = "LOWER(ttrss_entries.content) $reg_qpart LOWER('".
+ $rule['reg_exp'] . "')";
+ break;
+ case "both":
+ $qpart = "LOWER(ttrss_entries.title) $reg_qpart LOWER('".
+ $rule['reg_exp'] . "') OR LOWER(" .
+ "ttrss_entries.content) $reg_qpart LOWER('" . $rule['reg_exp'] . "')";
+ break;
+ case "tag":
+ $qpart = "LOWER(ttrss_user_entries.tag_cache) $reg_qpart LOWER('".
+ $rule['reg_exp'] . "')";
+ break;
+ case "link":
+ $qpart = "LOWER(ttrss_entries.link) $reg_qpart LOWER('".
+ $rule['reg_exp'] . "')";
+ break;
+ case "author":
+ $qpart = "LOWER(ttrss_entries.author) $reg_qpart LOWER('".
+ $rule['reg_exp'] . "')";
+ break;
+ }
- if ($filter["filter_param"] == "before")
- $cmp_qpart = "<";
- else
- $cmp_qpart = ">=";
+ if (isset($rule["feed_id"]) && $rule["feed_id"] > 0) {
+ $qpart .= " AND feed_id = " . db_escape_string($rule["feed_id"]);
+ }
- $timestamp = date("Y-m-d H:N:s", strtotime($filter["reg_exp"]));
- $query = "ttrss_entries.date_entered $cmp_qpart '$timestamp'";
- break;
- case "author":
- $query = "LOWER(ttrss_entries.author) $reg_qpart LOWER('".
- $filter['reg_exp'] . "')";
- break;
- }
+ if (isset($rule["cat_id"])) {
+ $qpart .= " AND cat_id " . ($rule["cat_id"] ? '= ' . $rule["cat_id"] : 'IS NULL');
+ }
- if ($filter["inverse"])
- $query = "NOT ($query)";
+ array_push($query, "($qpart)");
- if ($query) {
- if (DB_TYPE == "pgsql") {
- $query = " ($query) AND ttrss_entries.date_entered > NOW() - INTERVAL '14 days'";
- } else {
- $query = " ($query) AND ttrss_entries.date_entered > DATE_SUB(NOW(), INTERVAL 14 DAY)";
- }
- $query .= " AND ";
}
+ }
- return $query;
+ if (count($query) > 0) {
+ return "(" . join($filter["match_any_rule"] ? "OR" : "AND", $query) . ")";
} else {
- return false;
+ return "(false)";
}
}
return null;
}
+
+ function tmpdirname($path, $prefix) {
+ // Use PHP's tmpfile function to create a temporary
+ // directory name. Delete the file and keep the name.
+ $tempname = tempnam($path,$prefix);
+ if (!$tempname)
+ return false;
+
+ if (!unlink($tempname))
+ return false;
+
+ return $tempname;
+ }
+
+ function getFeedCategory($link, $feed) {
+ $result = db_query($link, "SELECT cat_id FROM ttrss_feeds
+ WHERE id = '$feed'");
+
+ if (db_num_rows($result) > 0) {
+ return db_fetch_result($result, 0, "cat_id");
+ } else {
+ return false;
+ }
+
+ }
+
?>