/** * 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; }
/** * 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; }