if ($order_by == "published_on") { $safe_order_by = "published_on"; } if ($order_by == "added_on") { $safe_order_by = "added_on"; } if ($order_by == "post_freq") { $safe_order_by = "post_freq"; } # posts containing a specific term (or terms)? if ($term) { $pterms = explode(",", $term); $tposts = array(); if (sizeof($pterms)) { foreach ($pterms as $pterm) { $tposts = array_merge($tposts, get_posts_with_term($pterm)); } } if (sizeof($tposts) >= 1) { $filters['post_id'] = $tposts; } else { $filters['post_id'] = array(); $output_available = 0; } } # category if ($category) { $filters['category'] = $category; } # timeframe $safe_timeframe = $timeframe;
function get_posts($sort_by = "published_on", $filters = array()) { $query = "SELECT SQL_CALC_FOUND_ROWS * FROM posts_summary "; $where_clause = " WHERE !ISNULL(post_id)"; #$where_clause .= " AND p2.post_id = links.post_id AND p2.blog_id != posts.blog_id"; $order_by = " ORDER BY pubdate DESC"; $limit_by = ""; if ($sort_by == "published_on") { $order_by = " ORDER BY pubdate DESC"; } if ($sort_by == "added_on") { $order_by = " ORDER BY added_on DESC"; } if ($sort_by == "cited") { $order_by = " ORDER BY linked_by DESC, pubdate DESC"; } if ($sort_by == "post_freq") { if ($filters['post_id']) { # we want an order in which elements that appear most frequently in $filters['post_id'] have the highest rankings $post_freq = array_count_values($filters['post_id']); arsort($post_freq); $order_by = " ORDER BY FIELD(post_id"; foreach ($post_freq as $post_id => $post_freq) { $order_by .= ", {$post_id}"; } $order_by .= ")"; } } $sort_by .= ", title ASC"; if (!$filters['limit']) { $filters['limit'] = $GLOBALS["config"]['posts_per_page']; } if ($filters['limit']) { $limit_by = " LIMIT " . $filters['limit']; } if ($filters['skip']) { if ($filters['skip'] < 0) { $filters['skip'] = 0; } $limit_by = " LIMIT " . $filters['skip'] . "," . $filters['limit']; } if ($filters['base_url']) { $where_clause .= " AND url LIKE '" . $filters['base_url'] . "%'"; } if ($filters['term']) { $tposts = get_posts_with_term($filters['term']); $tposts = "'" . implode("','", $tposts) . "'"; $where_clause .= " AND post_id IN ({$tposts})"; } if ($filters['category']) { $blogs = get_blogs_with_tag($filters['category']); $blogs = "'" . implode("','", $blogs) . "'"; $where_clause .= " AND blog_id IN ({$blogs})"; } if ($filters['tag']) { $tag = $filters['tag']; $tposts = array(); if ($tag == "original_research") { $tposts = get_posts_with_research(); } elseif ($tag == "conference") { $tposts = get_posts_with_conference(); } elseif ($tag == "review") { $tposts = get_posts_with_review(); } else { $tposts = get_posts_with_tag($filters['tag']); } $tposts = "'" . implode("','", $tposts) . "'"; $where_clause .= " AND post_id IN ({$tposts})"; } if ($filters['review']) { $tposts = get_posts_with_review(); $tposts = "'" . implode("','", $tposts) . "'"; $where_clause .= " AND post_id IN ({$tposts})"; } if ($filters['conference']) { $tposts = get_posts_with_conference(); $tposts = "'" . implode("','", $tposts) . "'"; $where_clause .= " AND post_id IN ({$tposts})"; } if ($filters['original_research']) { $tposts = get_posts_with_research(); $tposts = "'" . implode("','", $tposts) . "'"; $where_clause .= " AND post_id IN ({$tposts})"; } if ($filters['published_before']) { $date = $filters['published_before']; $where_clause .= " AND pubdate < '{$date}'"; } if ($filters['published_after']) { $date = $filters['published_after']; $where_clause .= " AND pubdate >= '{$date}'"; } if ($filters['blog_id']) { $where_clause .= " AND blog_id = " . $filters['blog_id']; } if (isset($filters['post_id'])) { if ($filters['post_id']) { if (!is_array($filters['post_id'])) { $where_clause .= " AND post_id = " . $filters['post_id']; } else { if (is_array($filters['post_id'])) { $where_clause .= " AND post_id IN (" . implode(",", $filters['post_id']) . ")"; } } } else { return array(); } } if ($filters['min_links']) { $where_clause .= " AND linked_by >= " . $filters['min_links']; } $posts = array(); $having = ""; $query = $query . $where_clause . $group_by . $having . $order_by . $limit_by; $results = mysql_query($query); $rows = mysql_num_rows($results); if ($limit_by) { $count_query = "SELECT FOUND_ROWS() AS rows"; $count_results = mysql_query($count_query); while ($row = mysql_fetch_assoc($count_results)) { $rows = $row['rows']; } } while ($row = mysql_fetch_assoc($results)) { $post = $row; $post['rows_returned'] = $rows; $post['post_request_type'] = "all"; if ($filters['conference']) { $post['post_request_type'] = "conference"; } if ($filters['review']) { $post['post_request_type'] = "review"; } if ($filters['originaL_research']) { $post['post_request_type'] = "original_research"; } array_push($posts, $post); } if ($filters['order_by_filenames_array']) { $filenames = $filters['order_by_filenames_array']; $ordered_posts = array(); # we need to do some post-ordering foreach ($filenames as $filename) { # find row with this filename, add it to the array. foreach ($posts as $post) { if ($post['filename'] == $filename) { array_push($ordered_posts, $post); } } } $posts = $ordered_posts; } return $posts; }
} } } } if ($bloglines_terms) { $valid_terms = validate_terms(array_keys($bloglines_terms)); if (!$valid_terms) { print "<h3>Sorry</h3>"; print "<p>None of the terms in " . $_SAFE['bloglines_username'] . "'s subscriptions are in the Postgenomic index."; print_r($bloglines_terms); } else { print "<h3>Matched Bloglines terms</h3>"; print_termcloud($valid_terms); # try and match up tags with blogs in the database foreach ($valid_terms as $term => $freq) { $post_ids = get_posts_with_term($term); # what blogs are these posts from? if ($post_ids) { $done = array(); $posts = get_posts("cited", array("post_id" => $post_ids)); if ($posts) { foreach ($posts as $post) { if ($done[$post['blog_id']]) { next; } else { if ($_SAFE['use_weighting_bloglines']) { $blog_ids[$post['blog_id']] += $freq; } else { $blog_ids[$post['blog_id']]++; } $blog_names[$post['blog_id']] = $post['blog_name'];