예제 #1
0
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) . "'}";
예제 #2
0
<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>
예제 #3
0
 * 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>
예제 #4
0
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']);
    }
}
예제 #5
0
    $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'])) {
예제 #6
0
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;
}
예제 #7
0
    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 });
예제 #8
0
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);
                }
            }
        }
    }
}
예제 #9
0
/** 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.');
}