예제 #1
0
 /**
  * Fetch a collection of feed items and format for use in the reader.
  *
  * @param  int    $pageTop      First item to display on the page. Note that it
  *                              is decremented by 1, so should not be 0.
  * @param  int    $pagefull     Number of items to show per page.
  * @param  int    $fromUnixTime Feed items will only be returned when their
  *                              publish date is later than this. Must be in
  *                              UNIX format.
  * @param  bool   $limitless    True to show all feed items. Skips pagination,
  *                              but obeys $fromUnixTime. Default: false.
  * @param  string $limit        Limit to feed items with certain relationships
  *                              set. Note that relationships are relative to
  *                              logged-in user. (starred|nominated)
  * @return array
  */
 public static function archive_feed_to_display($args = array())
 {
     // Backward compatibility.
     $func_args = func_get_args();
     if (!is_array($func_args[0]) || 1 < count($func_args)) {
         $args = array('start' => $func_args[0]);
         if (isset($func_args[1])) {
             $args['posts_per_page'] = $func_args[1];
         }
         if (isset($func_args[2])) {
             $args['from_unix_time'] = $func_args[2];
         }
         if (isset($func_args[3])) {
             $args['no_limit'] = $func_args[3];
         }
         if (isset($func_args[4])) {
             $args['relationship'] = $func_args[4];
         }
     } else {
         $args = func_get_arg(0);
     }
     // Make sure default values are set.
     $r = array_merge(array('start' => 0, 'posts_per_page' => 20, 'from_unix_time' => 0, 'no_limit' => false, 'relationship' => false, 'search_terms' => '', 'exclude_archived' => false), $args);
     if (empty($r['from_unix_time']) || $r['from_unix_time'] < 100) {
         $r['from_unix_time'] = 0;
     }
     $r['start'] = $r['start'] - 1;
     if (!$r['posts_per_page']) {
         $user_obj = wp_get_current_user();
         $user_id = $user_obj->ID;
         $r['posts_per_page'] = get_user_option('pf_pagefull', $user_id);
         if (empty($r['posts_per_page'])) {
             $r['posts_per_page'] = 20;
         }
     }
     $post_args = array('post_type' => pf_feed_item_post_type(), 'meta_key' => 'sortable_item_date', 'meta_value' => $r['from_unix_time'], 'meta_type' => 'SIGNED', 'meta_compare' => '>', 'orderby' => 'meta_value', 'order' => 'DESC', 'posts_per_page' => $r['posts_per_page'], 'offset' => $r['start']);
     if ($r['no_limit']) {
         $post_args['posts_per_page'] = -1;
     }
     if (!empty($r['relationship'])) {
         switch ($r['relationship']) {
             case 'starred':
                 $rel_items = pf_get_relationships_for_user('star', get_current_user_id());
                 break;
             case 'nominated':
                 $rel_items = pf_get_relationships_for_user('nominate', get_current_user_id());
                 break;
         }
         if (!empty($rel_items)) {
             $post_args['post__in'] = wp_list_pluck($rel_items, 'item_id');
         }
     }
     if (!empty($r['reveal'])) {
         switch ($r['reveal']) {
             case 'no_hidden':
                 $rel_items = pf_get_relationships_for_user('archive', get_current_user_id());
                 break;
         }
         if (!empty($rel_items)) {
             $posts_in = wp_list_pluck($rel_items, 'item_id');
             if (!empty($post_args['post__in'])) {
                 $post_args['post__in'] = array_merge($post_args['post__in'], $posts_in);
             } else {
                 $post_args['post__in'] = $posts_in;
             }
         }
     }
     if (!empty($r['exclude_archived'])) {
         $archived = pf_get_relationships_for_user('archive', get_current_user_id());
         $post_args['post__not_in'] = wp_list_pluck($archived, 'item_id');
     }
     if (!empty($r['search_terms'])) {
         /*
          * Quote so as to get only exact matches. This is for
          * backward compatibility - might want to remove it for
          * a more flexible search.
          */
         $post_args['s'] = '"' . $r['search_terms'] . '"';
     }
     if (isset($_GET['feed'])) {
         $post_args['post_parent'] = $_GET['feed'];
     } elseif (isset($_GET['folder'])) {
         $parents_in_folder = new WP_Query(array('post_type' => pressforward()->pf_feeds->post_type, 'fields' => 'ids', 'update_post_term_cache' => false, 'update_post_meta_cache' => false, 'tax_query' => array(array('taxonomy' => pressforward()->pf_feeds->tag_taxonomy, 'field' => 'term_id', 'terms' => $_GET['folder']))));
         #var_dump('<pre>'); var_dump($parents_in_folder); die();
         $post_args['post_parent__in'] = $parents_in_folder->posts;
     }
     $feed_items = new WP_Query($post_args);
     $feedObject = array();
     $c = 0;
     foreach ($feed_items->posts as $post) {
         $post_id = $post->ID;
         $item_id = get_post_meta($post_id, 'item_id', true);
         $source_title = get_post_meta($post_id, 'source_title', true);
         $item_date = get_post_meta($post_id, 'item_date', true);
         $item_author = get_post_meta($post_id, 'item_author', true);
         $item_link = get_post_meta($post_id, 'item_link', true);
         $item_feat_img = get_post_meta($post_id, 'item_feat_img', true);
         $item_wp_date = get_post_meta($post_id, 'item_wp_date', true);
         $item_tags = get_post_meta($post_id, 'item_tags', true);
         $source_repeat = get_post_meta($post_id, 'source_repeat', true);
         $readable_status = get_post_meta($post_id, 'readable_status', true);
         $contentObj = new pf_htmlchecker($post->post_content);
         $item_content = $contentObj->closetags($post->post_content);
         $feedObject['rss_archive_' . $c] = pf_feed_object($post->post_title, $source_title, $item_date, $item_author, $item_content, $item_link, $item_feat_img, $item_id, $item_wp_date, $item_tags, date('o-m-d\\TH:i:sO', strtotime($post->post_date)), $source_repeat, $post_id, $readable_status);
         $c++;
     }
     return $feedObject;
 }
예제 #2
0
/**
 * Get a list of starred items for a given user
 *
 * Use this function in conjunction with PF_Feed_Item:
 *
 *    $starred_item_ids = pf_get_starred_items_for_user( $user_id, 'simple' );
 *
 *    $feed_item = new PF_Feed_Item();
 *    $items = $feed_item->get( array(
 *        'post__in' => $starred_item_ids
 *    ) );
 *
 * @param int $user_id
 * @param string $format 'simple' to get back just the item IDs. Otherwise raw relationship objects
 */
function pf_get_starred_items_for_user($user_id, $format = 'raw')
{
    $rs = pf_get_relationships_for_user('star', $user_id);
    if ('simple' == $format) {
        $rs = wp_list_pluck($rs, 'item_id');
    }
    return $rs;
}