include "header.php"; print "<br>"; $feed = $_GET['feed']; $feeds = array(); $p =& FoF_Prefs::instance(); $admin_prefs = $p->admin_prefs; if ($feed) { $feed = fof_db_get_feed_by_id($feed); $feeds[] = $feed; } else { if ($fof_user_id == 1) { $result = fof_db_get_feeds(); } else { $result = fof_db_get_subscriptions(fof_current_user()); } while ($feed = fof_db_get_row($result)) { if (time() - $feed["feed_cache_date"] < $admin_prefs["manualtimeout"] * 60) { $title = $feed['feed_title']; list($timestamp, ) = fof_nice_time_stamp($feed['feed_cache_date']); print "{$title} was just updated {$timestamp}!<br>"; } else { $feeds[] = $feed; } } } $feeds = fof_multi_sort($feeds, 'feed_cache_attempt_date', false); print "<script>\nwindow.onload = ajaxupdate;\nfeedslist = ["; foreach ($feeds as $feed) { $title = $feed['feed_title']; $id = $feed['feed_id']; $feedjson[] = "{'id': {$id}, 'title': '" . addslashes($title) . "'}";
<input type=submit name=adminprefs value="Save Admin Options"> </form> <?php if (!defined('FOF_AUTH_EXTERNAL_ONLY')) { ?> <br><h1 id="adduser">Add User</h1> <form method="post" action="prefs.php#adduser" style="border: 1px solid black; margin: 10px; padding: 10px;"> Username: <input type="text" name=username> Password: <input type="text" name=password> <input type=submit name=adduser value="Add user"> </form> <?php $result = fof_db_get_nonadmin_usernames(); $user_options = array(); while (($row = fof_db_get_row($result)) !== false) { $username = $row['user_name']; $user_options[] = "<option value={$username}>{$username}</option>"; } if (!empty($user_options)) { ?> <br><h1 id="deluser">Delete User</h1> <form method="post" action="prefs.php#deluser" style="border: 1px solid black; margin: 10px; padding: 10px;" onsubmit="return confirm('Delete User - Are you sure?')"> <select name=username><?php echo implode('', $user_options); ?> </select> <input type=submit name=deleteuser value="Delete user"><br> </form>
* Distributed under the GPL - see LICENSE * */ header("Content-Type: text/xml; charset=utf-8"); include_once "fof-main.php"; echo '<?xml version="1.0"?>'; ?> <opml version="1.1"> <head> <title>Feed on Feeds Subscriptions</title> </head> <body> <?php $result = fof_db_get_subscriptions(fof_current_user()); while ($row = fof_db_get_row($result)) { $url = htmlspecialchars($row['feed_url']); $title = htmlspecialchars($row['feed_title']); $link = htmlspecialchars($row['feed_link']); echo <<<HEYO <outline type="rss" text="{$title}" title="{$title}" htmlUrl="{$link}" xmlUrl="{$url}" /> HEYO; } ?> </body>
function fof_db_get_users() { global $FOF_USER_TABLE; $result = fof_safe_query("select user_name, user_id, user_prefs from {$FOF_USER_TABLE}"); while ($row = fof_db_get_row($result)) { $users[$row['user_id']['user_name']] = $row['user_name']; $users[$row['user_id']['user_prefs']] = unserialize($row['user_prefs']); } }
$tag_id = fof_db_get_tag_by_name($_POST['update_tag_sources']); $subs = fof_db_subscriptions_by_tags(fof_current_user()); /* FIXME: check timeouts, like below */ if (!empty($subs[$tag_id])) { echo 'pendingUpdates.add(' . json_encode($subs[$tag_id]) . ');'; } exit; } /* returns a script block which updates all updatable subscribed feeds */ if (!empty($_POST['update_subscribed_sources'])) { fof_set_content_type('application/javascript'); $now = time(); $timeout = $fof_prefs_obj->admin_prefs['manualtimeout'] * 60; $sources = array(); $statement = fof_db_get_subscriptions(fof_current_user(), true); while (($feed = fof_db_get_row($statement)) !== false) { if ($now - $feed['feed_cache_date'] < $timeout) { continue; } if ($now < $feed['feed_cache_next_attempt']) { continue; } $sources[] = $feed['feed_id']; } if (!empty($sources)) { echo 'pendingUpdates.add(' . json_encode($sources) . ');'; } exit; } /* returns a list of tags for a feed, with markup */ if (!empty($_POST['subscription_tag_list'])) {
function fof_db_authenticate_hash($user_name, $user_password_hash) { global $FOF_USER_TABLE; global $fof_connection, $fof_user_id, $fof_user_name, $fof_user_level; fof_trace(); $query = "SELECT * FROM {$FOF_USER_TABLE} WHERE user_name = :user_name AND user_password_hash = :user_password_hash"; $statement = $fof_connection->prepare($query); $statement->bindValue(':user_name', $user_name); $statement->bindValue(':user_password_hash', $user_password_hash); $result = $statement->execute(); $row = fof_db_get_row($statement, NULL, TRUE); if (!$row) { $fof_user_id = NULL; $fof_user_name = NULL; $fof_user_level = NULL; fof_log("u:'{$user_name}' uph:'{$user_password_hash}' FAIL", 'auth'); return false; } $fof_user_id = $row['user_id']; $fof_user_name = $row['user_name']; $fof_user_level = $row['user_level']; fof_log("u:'{$user_name}' uph:'{$user_password_hash}' OK ui:'{$fof_user_id}' un:'{$fof_user_name}' ul:'{$fof_user_level}'", 'auth'); return true; }
echo '</div>' . "\n"; } elseif (fof_db_is_subscribed_id(fof_current_user(), $feed_id)) { echo '<h1>Feed Details</h1>' . "\n"; } else { echo '<div class="error"><h1>Not Subscribed</h1>You don\'t know anything about that feed.</div>' . "\n"; die; } if (fof_is_admin() && !fof_db_is_subscribed_id(fof_current_user(), $feed_id)) { /* fof_get_feed expects a subscription, so shirk that and just populate overall stats */ $feed_row = fof_db_get_feed_by_id($feed_id); fof_db_subscription_feed_fix($feed_row); list($feed_row['feed_items'], $feed_row['feed_tagged'], $counts) = fof_db_feed_counts(fof_current_user(), $feed_id); $feed_row = array_merge(array('tags' => array(), 'feed_unread' => 0, 'feed_read' => 0, 'feed_starred' => 0, 'feed_age' => $feed_row['feed_cache_date']), $feed_row); list($feed_row['agestr'], $feed_row['agestrabbr']) = fof_nice_time_stamp($feed_row['feed_cache_date']); $max_stmt = fof_db_get_latest_item_age(fof_current_user(), $feed_id); $feed_row['max_date'] = fof_db_get_row($max_stmt, 'max_date', TRUE); list($feed_row['lateststr'], $feed_row['lateststrabbr']) = fof_nice_time_stamp($feed_row['max_date']); /* not subscribed, so no subscription preferences to change.. */ $admin_view = true; } else { $feed_row = fof_get_feed(fof_current_user(), $feed_id); $admin_view = false; } /* only include the update scripts if subscribed */ if (!$admin_view || fof_db_is_subscribed_id(fof_current_user(), $feed_id)) { $feed_id_js = json_encode($feed_id); ?> <script> function subscription_tags_refresh(feed) { var params = { subscription_tag_list: feed }; new Ajax.Updater($("feedtags").down("ul"), "feed-action.php", { method: "post", parameters: params });
function fof_apply_plugin_tags($feed_id, $item_id = NULL, $user_id = NULL) { $users = array(); if ($user_id) { $users[] = $user_id; } else { $result = fof_get_subscribed_users($feed_id); while ($row = fof_db_get_row($result)) { $users[] = $row['user_id']; } } $items = array(); if ($item_id) { $items[] = fof_db_get_item($user_id, $item_id); } else { $result = fof_db_get_items($user_id, $feed_id, $what = "all", NULL, NULL); foreach ($result as $r) { $items[] = $r; } } $userdata = fof_get_users(); foreach ($users as $user) { fof_log("tagging for {$user}"); global $fof_tag_prefilters; foreach ($fof_tag_prefilters as $plugin => $filter) { fof_log("considering {$plugin} {$filter}"); if (!$userdata[$user]['prefs']['plugin_' . $plugin]) { foreach ($items as $item) { $tags = $filter($item['item_link'], $item['item_title'], $item['item_content']); fof_tag_item($user, $item['item_id'], $tags); } } } } }
/** Determine if a foreign key exists. */ function fof_install_database_reference_exists($table, $column) { global $fof_connection; if (defined('USE_MYSQL')) { $query = "SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA='" . FOF_DB_DBNAME . "' AND TABLE_NAME='" . $table . "' AND COLUMN_NAME='" . $column . "' AND CONSTRAINT_NAME NOT LIKE 'PRIMARY'"; $statement = $fof_connection->query($query); $row = fof_db_get_row($statement, NULL, TRUE); return !empty($row); } if (defined('USE_SQLITE')) { $query = "PRAGMA foreign_key_list('" . $table . "')"; $statement = $fof_connection->query($query); while (($row = fof_db_get_row($statement)) !== false) { if ($row['from'] == $column) { $statement->closeCursor(); return true; } } return false; } throw new Exception('Query not implemented for this pdo driver.'); }