X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=backend.php;h=b2eba083eefb88231300a1349eee150609adbc03;hb=e52034b4bcce994312ce2af31be0a46a70172691;hp=fe54e36a70d95998ad4fc1170655ad870918331f;hpb=a598370dde80604280f1a9708f8427902f376209;p=tt-rss.git diff --git a/backend.php b/backend.php index fe54e36a..b2eba083 100644 --- a/backend.php +++ b/backend.php @@ -1,107 +1,72 @@ -

Error: Not logged in.

- - - "; + if ($_SESSION["uid"]) { + if (!validate_session()) { + header("Content-Type: text/json"); + print error_json(6); + return; } - exit; + load_user_plugins( $_SESSION["uid"]); } $purge_intervals = array( @@ -114,509 +79,69 @@ 90 => __("3 months old")); $update_intervals = array( - 0 => __("Use default"), + 0 => __("Default interval"), -1 => __("Disable updates"), - 15 => __("Each 15 minutes"), - 30 => __("Each 30 minutes"), + 15 => __("15 minutes"), + 30 => __("30 minutes"), 60 => __("Hourly"), - 240 => __("Each 4 hours"), - 720 => __("Each 12 hours"), + 240 => __("4 hours"), + 720 => __("12 hours"), 1440 => __("Daily"), 10080 => __("Weekly")); - $update_methods = array( - 0 => __("Use default"), - 1 => __("Magpie"), - 2 => __("SimplePie")); - - if (ENABLE_SIMPLEPIE) { - $update_methods[0] .= ' (SimplePie)'; - } else { - $update_methods[0] .= ' (Magpie)'; - } + $update_intervals_nodefault = array( + -1 => __("Disable updates"), + 15 => __("15 minutes"), + 30 => __("30 minutes"), + 60 => __("Hourly"), + 240 => __("4 hours"), + 720 => __("12 hours"), + 1440 => __("Daily"), + 10080 => __("Weekly")); $access_level_names = array( - 0 => __("User"), + 0 => __("User"), 5 => __("Power User"), 10 => __("Administrator")); - require_once "modules/pref-prefs.php"; - require_once "modules/popup-dialog.php"; - require_once "modules/help.php"; - require_once "modules/pref-feeds.php"; - require_once "modules/pref-filters.php"; - require_once "modules/pref-labels.php"; - require_once "modules/pref-users.php"; - require_once "modules/pref-feed-browser.php"; - - if (!sanity_check($link)) { return; } - - switch($op) { // Select action according to $op value. - case "rpc": - // Handle remote procedure calls. - handle_rpc_request($link); - break; // rpc - - case "feeds": - if (ENABLE_GZIP_OUTPUT) { - ob_start("ob_gzhandler"); - } - - $tags = $_GET["tags"]; - - $subop = $_GET["subop"]; - - switch($subop) { - case "catchupAll": - db_query($link, "UPDATE ttrss_user_entries SET - last_read = NOW(),unread = false WHERE owner_uid = " . $_SESSION["uid"]); - break; - - case "collapse": - $cat_id = db_escape_string($_GET["cid"]); - - db_query($link, "UPDATE ttrss_feed_categories SET - collapsed = NOT collapsed WHERE id = '$cat_id' AND owner_uid = " . - $_SESSION["uid"]); - return; - break; - } - - outputFeedList($link, $tags); - break; // feeds - - case "view": - - $id = db_escape_string($_GET["id"]); - $feed_id = db_escape_string($_GET["feed"]); - $cids = split(",", db_escape_string($_GET["cids"])); - $mode = db_escape_string($_GET["mode"]); - $omode = db_escape_string($_GET["omode"]); - - $csync = $_GET["csync"]; - - print ""; - - // in prefetch mode we only output requested cids, main article - // just gets marked as read (it already exists in client cache) - - if ($mode == "") { - outputArticleXML($link, $id, $feed_id); - } else { - catchupArticleById($link, $id, 0); - } - - if (!$_SESSION["bw_limit"]) { - foreach ($cids as $cid) { - if ($cid) { - outputArticleXML($link, $cid, $feed_id, false); - } - } - } - - if ($mode == "prefetch" && $csync) { - print ""; - getAllCounters($link, $omode); - print ""; - } - - print ""; - break; // view - - case "viewfeed": - - $print_exec_time = true; - $timing_info = getmicrotime(); - - print ""; - - if ($_GET["debug"]) $timing_info = print_checkpoint("0", $timing_info); - - $omode = db_escape_string($_GET["omode"]); - - $feed = db_escape_string($_GET["feed"]); - $subop = db_escape_string($_GET["subop"]); - $view_mode = db_escape_string($_GET["view_mode"]); - $limit = db_escape_string($_GET["limit"]); - $cat_view = db_escape_string($_GET["cat"]); - $next_unread_feed = db_escape_string($_GET["nuf"]); - $offset = db_escape_string($_GET["skip"]); - $vgroup_last_feed = db_escape_string($_GET["vgrlf"]); - $csync = $_GET["csync"]; - - set_pref($link, "_DEFAULT_VIEW_MODE", $view_mode); - set_pref($link, "_DEFAULT_VIEW_LIMIT", $limit); - - if (!$cat_view && preg_match("/^[0-9][0-9]*$/", $feed)) { - db_query($link, "UPDATE ttrss_feeds SET last_viewed = NOW() - WHERE id = '$feed' AND owner_uid = ".$_SESSION["uid"]); - } - - print ""; - - print ""; - print ""; - - $headlines_unread = getFeedUnread($link, $returned_feed); - - print ""; - printf("", $disable_cache); - - if ($_GET["debug"]) $timing_info = print_checkpoint("10", $timing_info); - - if (is_array($topmost_article_ids) && !get_pref($link, 'COMBINED_DISPLAY_MODE') && !$_SESSION["bw_limit"]) { - print ""; - foreach ($topmost_article_ids as $id) { - outputArticleXML($link, $id, $feed, false); - } - print ""; - } - } - - if ($_GET["debug"]) $timing_info = print_checkpoint("20", $timing_info); - - $viewfeed_ctr_interval = 300; - - if ($csync) { - $viewfeed_ctr_interval = 60; - } - - if (time() - $_SESSION["get_all_counters_stamp"] > $viewfeed_ctr_interval) { - print ""; - getAllCounters($link, $omode, $feed); - print ""; - } - - if ($_GET["debug"]) $timing_info = print_checkpoint("30", $timing_info); - - print_runtime_info($link); - - print ""; - break; // viewfeed - - case "pref-feeds": - module_pref_feeds($link); - break; // pref-feeds - - case "pref-filters": - module_pref_filters($link); - break; // pref-filters - - case "pref-labels": - module_pref_labels($link); - break; // pref-labels - - case "pref-prefs": - module_pref_prefs($link); - break; // pref-prefs - - case "pref-users": - module_pref_users($link); - break; // prefs-users + $op = str_replace("-", "_", $op); - case "help": - module_help($link); - break; // help + $override = PluginHost::getInstance()->lookup_handler($op, $method); - case "dlg": - module_popup_dialog($link); - break; // dlg + if (class_exists($op) || $override) { - case "pref-pub-items": - module_pref_pub_items($link); - break; // pref-pub-items - - case "globalUpdateFeeds": - // update feeds of all users, may be used anonymously - - print ""; - - // FIXME : old feed update way. To be removed. - //$result = db_query($link, "SELECT id FROM ttrss_users"); - - //while ($line = db_fetch_assoc($result)) { - // $user_id = $line["id"]; - // print ""; - // update_all_feeds($link, false, $user_id); - //} - - print " - - "; - break; // globalUpdateFeeds - - case "user-details": - - if (WEB_DEMO_MODE || $_SESSION["access_level"] < 10) { - return; - } - - /* - print " - Tiny Tiny RSS : User Details - - - "; - */ - - $uid = sprintf("%d", $_GET["id"]); - - print "
User details
"; - - print "
"; - - $result = db_query($link, "SELECT login, - ".SUBSTRING_FOR_DATE."(last_login,1,16) AS last_login, - access_level, - (SELECT COUNT(int_id) FROM ttrss_user_entries - WHERE owner_uid = id) AS stored_articles, - ".SUBSTRING_FOR_DATE."(created,1,16) AS created - FROM ttrss_users - WHERE id = '$uid'"); - - if (db_num_rows($result) == 0) { - print "

User not found

"; - return; - } - - // print "

User Details

"; - - $login = db_fetch_result($result, 0, "login"); - - // print "

$login

"; - - print ""; - - $last_login = date(get_pref($link, 'LONG_DATE_FORMAT'), - strtotime(db_fetch_result($result, 0, "last_login"))); - - $created = date(get_pref($link, 'LONG_DATE_FORMAT'), - strtotime(db_fetch_result($result, 0, "created"))); - - $access_level = db_fetch_result($result, 0, "access_level"); - $stored_articles = db_fetch_result($result, 0, "stored_articles"); - - // print ""; - // print ""; - print ""; - print ""; - print ""; - - $result = db_query($link, "SELECT COUNT(id) as num_feeds FROM ttrss_feeds - WHERE owner_uid = '$uid'"); - - $num_feeds = db_fetch_result($result, 0, "num_feeds"); - - print ""; - - /* - $result = db_query($link, "SELECT - SUM(LENGTH(content)+LENGTH(title)+LENGTH(link)+LENGTH(guid)) AS db_size - FROM ttrss_user_entries,ttrss_entries - WHERE owner_uid = '$uid' AND ref_id = id"); - - $db_size = round(db_fetch_result($result, 0, "db_size") / 1024); - - print ""; - */ - - print "
Username$login
Access level$access_level
".__('Registered')."$created
".__('Last logged in')."$last_login
".__('Stored articles')."$stored_articles
".__('Subscribed feeds count')."$num_feeds
Approx. used DB size$db_size KBytes
"; - - print "

".__('Subscribed feeds')."

"; - - $result = db_query($link, "SELECT id,title,site_url FROM ttrss_feeds - WHERE owner_uid = '$uid' ORDER BY title"); - - print ""; - - print "
"; - - print "
-
"; - - // print ""; - - break; // user-details - - case "pref-feed-browser": - module_pref_feed_browser($link); - break; // pref-feed-browser - - case "publish": - $key = db_escape_string($_GET["key"]); - - $result = db_query($link, "SELECT login, owner_uid - FROM ttrss_user_prefs, ttrss_users WHERE - pref_name = '_PREFS_PUBLISH_KEY' AND - value = '$key' AND - ttrss_users.id = owner_uid"); - - if (db_num_rows($result) == 1) { - $owner = db_fetch_result($result, 0, "owner_uid"); - $login = db_fetch_result($result, 0, "login"); - - generate_syndicated_feed($link, $owner, -2, false); - - } else { - print "User not found"; - } - break; // publish - - case "rss": - $feed = db_escape_string($_GET["id"]); - $user = db_escape_string($_GET["user"]); - $pass = db_escape_string($_GET["pass"]); - $is_cat = $_GET["is_cat"] != false; - - $search = db_escape_string($_GET["q"]); - $match_on = db_escape_string($_GET["m"]); - $search_mode = db_escape_string($_GET["smode"]); - - if (!$_SESSION["uid"] && $user && $pass) { - authenticate_user($link, $user, $pass); - } - - if ($_SESSION["uid"] || - http_authenticate_user($link)) { - - generate_syndicated_feed($link, 0, $feed, $is_cat, - $search, $search_mode, $match_on); - } - break; // rss - - case "labelFromSearch": - $search = db_escape_string($_GET["search"]); - $search_mode = db_escape_string($_GET["smode"]); - $match_on = db_escape_string($_GET["match"]); - $is_cat = db_escape_string($_GET["is_cat"]); - $title = db_escape_string($_GET["title"]); - $feed = sprintf("%d", $_GET["feed"]); - - $label_qparts = array(); - - $search_expr = getSearchSql($search, $match_on); - - if ($is_cat) { - if ($feed != 0) { - $search_expr .= " AND ttrss_feeds.cat_id = $feed "; - } else { - $search_expr .= " AND ttrss_feeds.cat_id IS NULL "; - } - } else { - if ($search_mode == "all_feeds") { - // NOOP - } else if ($search_mode == "this_cat") { - - $tmp_result = db_query($link, "SELECT cat_id - FROM ttrss_feeds WHERE id = '$feed'"); - - $cat_id = db_fetch_result($tmp_result, 0, "cat_id"); + if ($override) { + $handler = $override; + } else { + $handler = new $op($_REQUEST); + } - if ($cat_id > 0) { - $search_expr .= " AND ttrss_feeds.cat_id = $cat_id "; + if ($handler && implements_interface($handler, 'IHandler')) { + if (validate_csrf($csrf_token) || $handler->csrf_ignore($method)) { + if ($handler->before($method)) { + if ($method && method_exists($handler, $method)) { + $handler->$method(); } else { - $search_expr .= " AND ttrss_feeds.cat_id IS NULL "; + if (method_exists($handler, "catchall")) { + $handler->catchall($method); + } } + $handler->after(); + return; } else { - $search_expr .= " AND ttrss_feeds.id = $feed "; + header("Content-Type: text/json"); + print error_json(6); + return; } - - } - - $search_expr = db_escape_string($search_expr); - - print $search_expr; - - if ($title) { - $result = db_query($link, - "INSERT INTO ttrss_labels (sql_exp,description,owner_uid) - VALUES ('$search_expr', '$title', '".$_SESSION["uid"]."')"); - } - break; // labelFromSearch - - case "getUnread": - $login = db_escape_string($_GET["login"]); - - header("Content-Type: text/plain; charset=utf-8"); - - $result = db_query($link, "SELECT id FROM ttrss_users WHERE login = '$login'"); - - if (db_num_rows($result) == 1) { - $uid = db_fetch_result($result, 0, "id"); - print getGlobalUnread($link, $uid); } else { - print "-1;User not found"; + header("Content-Type: text/json"); + print error_json(6); + return; } + } + } - $print_exec_time = false; - break; // getUnread - - case "digestTest": - header("Content-Type: text/plain"); - print_r(prepare_headlines_digest($link, $_SESSION["uid"])); - $print_exec_time = false; - break; // digestTest - - case "digestSend": - header("Content-Type: text/plain"); - send_headlines_digests($link); - $print_exec_time = false; - break; // digestSend - - } // Select action according to $op value. + header("Content-Type: text/json"); + print error_json(13); - // We close the connection to database. - db_close($link); ?> - - - -