function wp_rss_multi_importer_checkfeeds() { $rssmi_global_options = get_option('rssmi_global_options'); $noDirectFetch = isset($rssmi_global_options['noForcedFeed']) ? $rssmi_global_options['noForcedFeed'] : 0; global $wpdb; $query = "SELECT ID FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'rssmi_feed'"; $myUrlList = array(); $ids = $wpdb->get_results($query); foreach ($ids as $id) { array_push($myUrlList, get_post_meta($id->ID, 'rssmi_url', true)); } if (!empty($myUrlList)) { // Check invalid Feed URLS $badURL = 0; foreach ($myUrlList as $rssURL) { if (!empty($rssURL)) { if ($noDirectFetch == 1) { $feed = fetch_feed($rssURL); } else { $feed = wp_rss_fetchFeed($rssURL, 20, true, 0); } if ($feed->error()) { if ($badURL == 0) { _e('<div style="border-bottom:1px solid black;padding-bottom:20px"><h2>These RSS Feed URL are either invalid or not making a connection to their servers at the time of this test:</h2> (If after checking, you find the feed is valid then <a href="http://www.wprssimporter.com/faqs/im-told-the-feed-isnt-valid-or-working/" target=\\"_blank\\">go here to learn more about what might be wrong</a>.)', 'wp-rss-multi-importer'); $badURL = 1; } _e('<h3> ' . $rssURL . '</h3>', 'wp-rss-multi-importer'); _e("<strong>Error: Invalid feed URL or feed is not being served at the time of this test.</strong> - Validate this feed source URL by <a href=\"http://validator.w3.org/feed/check.cgi?url=" . $rssURL . "\" target=\"_blank\">clicking here</a>.", 'wp-rss-multi-importer'); } if ($badURL == 1) { echo "</div>"; } } } if ($badURL == 0) { _e("<h3>GOOD NEWS: There were no errors due to feeds not connecting to external servers. Make sure to update the feeds by clicking the green button below.</h3>", 'wp-rss-multi-importer'); } die; } }
function rssmi_check_url_status() { global $post; $feed_url = get_post_meta($post->ID, 'rssmi_url', true); $checkmark = WP_RSS_MULTI_IMAGES . "check_mark.png"; $urlerror = WP_RSS_MULTI_IMAGES . "error.png"; if (!empty($feed_url)) { // echo $feed_url; $feed = wp_rss_fetchFeed($feed_url); // if ( ! is_wp_error( $feed ) ) { if (!$feed->error()) { // return "<span style=\"color:green\">OK</span>"; // return "<img src=$checkmark>"; } else { // return "<img src=$urlerror>"; // return "<span style=\"color:red\">NOT AVAILABLE</span>"; } } }
function wp_rss_multi_importer_shortcode($atts = array()) { add_action('wp_footer', 'footer_scripts'); if (!function_exists("wprssmi_hourly_feed")) { function wprssmi_hourly_feed() { return 0; } } add_filter('wp_feed_cache_transient_lifetime', 'wprssmi_hourly_feed'); $siteurl = get_site_url(); $cat_options_url = $siteurl . '/wp-admin/options-general.php?page=wp_rss_multi_importer_admin&tab=category_options/'; $images_url = $siteurl . '/wp-content/plugins/' . basename(dirname(__FILE__)) . '/images'; global $fopenIsSet; $fopenIsSet = ini_get('allow_url_fopen'); $parms = shortcode_atts(array('category' => 0, 'hdsize' => '16px', 'hdweight' => 400, 'anchorcolor' => '', 'testyle' => 'color: #000000; font-weight: bold;margin: 0 0 0.8125em;', 'maximgwidth' => 150, 'datestyle' => 'font-style:italic;', 'floattype' => '', 'showdate' => 1, 'showgroup' => 1, 'thisfeed' => '', 'timer' => 0, 'dumpthis' => 0, 'cachetime' => NULL, 'pinterest' => 0, 'maxperpage' => 0, 'excerptlength' => 50, 'noimage' => 0, 'sortorder' => NULL, 'defaultimage' => NULL, 'showdesc' => NULL, 'mytemplate' => '', 'showmore' => NULL, 'authorprep' => 'by', 'windowstyle' => NULL, 'morestyle' => '[...]'), $atts); $showThisDesc = $parms['showdesc']; $defaultImage = $parms['defaultimage']; $sortOrder = $parms['sortorder']; $authorPrep = $parms['authorprep']; $anchorcolor = $parms['anchorcolor']; $datestyle = $parms['datestyle']; $hdsize = $parms['hdsize']; $thisCat = $parms['category']; $parmfloat = $parms['floattype']; $catArray = explode(",", $thisCat); $showdate = $parms['showdate']; $showgroup = $parms['showgroup']; $pshowmore = $parms['showmore']; $hdweight = $parms['hdweight']; $testyle = $parms['testyle']; global $morestyle; $morestyle = $parms['morestyle']; $warnmsg = $parms['warnmsg']; global $maximgwidth; $maximgwidth = $parms['maximgwidth']; $thisfeed = $parms['thisfeed']; // max posts per feed $timerstop = $parms['timer']; $dumpthis = $parms['dumpthis']; //diagnostic parameter $cachename = 'wprssmi_' . $thisCat; $cachetime = $parms['cachetime']; $pinterest = $parms['pinterest']; $parmmaxperpage = $parms['maxperpage']; $noimage = $parms['noimage']; $mytemplate = $parms['mytemplate']; $windowstyle = $parms['windowstyle']; $excerptlength = $parms['excerptlength']; $readable = ''; $options = get_option('rss_import_options'); $option_items = get_option('rss_import_items'); $option_category_images = get_option('rss_import_categories_images'); if ($option_items == false) { return _e("You need to set up the WP RSS Multi Importer Plugin before any results will show here. Just go into the <a href='/wp-admin/options-general.php?page=wp_rss_multi_importer_admin'>settings panel</a> and put in some RSS feeds", 'wp-rss-multi-importer'); } $cat_array = preg_grep("^feed_cat_^", array_keys($option_items)); if (count($cat_array) == 0) { // for backward compatibility $noExistCat = 1; } else { $noExistCat = 0; } if (!empty($option_items)) { //GET PARAMETERS global $RSSdefaultImage; $RSSdefaultImage = $options['RSSdefaultImage']; // 0- process normally, 1=use default for category, 2=replace when no image available $size = count($option_items); $sortDir = $options['sortbydate']; // 1 is ascending $stripAll = $options['stripAll']; $todaybefore = $options['todaybefore']; $adjustImageSize = $options['adjustImageSize']; $showDesc = $options['showdesc']; // 1 is show $descNum = $options['descnum']; $maxperPage = $options['maxperPage']; $showcategory = $options['showcategory']; $cacheMin = $options['cacheMin']; $maxposts = $options['maxfeed']; $showsocial = $options['showsocial']; $targetWindow = $options['targetWindow']; // 0=LB, 1=same, 2=new $floatType = $options['floatType']; $noFollow = $options['noFollow']; $showmore = $options['showmore']; $cb = $options['cb']; // 1 if colorbox should not be loaded $pag = $options['pag']; // 1 if pagination $perPage = $options['perPage']; global $anyimage; $anyimage = $options['anyimage']; $addAuthor = $options['addAuthor']; $warnmsg = $options['warnmsg']; $directFetch = $options['directFetch']; $forceFeed = $options['forceFeed']; $forceFeed = $forceFeed == 1 ? True : False; $timeout = $options['timeout']; if (!isset($timeout)) { $timeout = 10; } if (!isset($directFetch)) { $directFetch = 0; } if (!is_null($defaultImage)) { $RSSdefaultImage = $defaultImage; } if (!is_null($windowstyle)) { $targetWindow = $windowstyle; } if (!is_null($showThisDesc)) { $showDesc = $showThisDesc; } if (!is_null($sortOrder)) { $sortDir = $sortOrder; } if (!is_null($pshowmore)) { $showmore = $pshowmore; } if (!is_null($excerptlength)) { $descNum = $excerptlength; } if (empty($options['sourcename'])) { $attribution = ''; } else { $attribution = $options['sourcename'] . ': '; } if ($floatType == '1') { $float = "left"; } else { $float = "none"; } if ($parmfloat != '') { $float = $parmfloat; } if ($parmmaxperpage != 0) { $maxperPage = $parmmaxperpage; } if ($noimage == 1) { $stripAll = 1; } if ($thisfeed != '') { $maxposts = $thisfeed; } if ($pinterest == 1) { $divfloat = "left"; } else { $divfloat = ''; } if ($cacheMin == '') { $cacheMin = 0; } //set caching minutes if (!is_null($cachetime)) { $cacheMin = $cachetime; } //override caching minutes with shortcode parameter if (is_null($cb) && $targetWindow == 0) { add_action('wp_footer', 'colorbox_scripts'); // load colorbox only if not indicated as conflict } $template = $options['template']; if ($mytemplate != '') { $template = $mytemplate; } // END PARAMETERS timer_start(); //TIMER START - for testing purposes $myarray = get_transient($cachename); // added for transient cache if ($cacheMin == 0) { delete_transient($cachename); } if (false === $myarray) { // added for transient cache - only get feeds and put into array if the array isn't cached (for a given category set) for ($i = 1; $i <= $size; $i = $i + 1) { $key = key($option_items); if (!strpos($key, '_') > 0) { continue; } //this makes sure only feeds are included here...everything else are options $rssName = $option_items[$key]; next($option_items); $key = key($option_items); $rssURL = $option_items[$key]; next($option_items); $key = key($option_items); $rssCatID = $option_items[$key]; ///this should be the category ID if (!in_array(0, $catArray) && in_array($option_items[$key], $catArray) || in_array(0, $catArray) || $noExistCat == 1) { $myfeeds[] = array("FeedName" => $rssName, "FeedURL" => $rssURL, "FeedCatID" => $rssCatID); //with Feed Category ID } $cat_array = preg_grep("^feed_cat_^", array_keys($option_items)); // for backward compatibility if (count($cat_array) > 0) { next($option_items); //skip feed category } } if ($maxposts == "") { return _e("One more step...go into the the <a href='/wp-admin/options-general.php?page=wp_rss_multi_importer_admin&tab=setting_options'>Settings Panel and choose Options.</a>", 'wp-rss-multi-importer'); } // check to confirm they set options if (empty($myfeeds)) { return _e("You've either entered a category ID that doesn't exist or have no feeds configured for this category. Edit the shortcode on this page with a category ID that exists, or <a href=" . $cat_options_url . ">go here and and get an ID</a> that does exist in your admin panel.", 'wp-rss-multi-importer'); exit; } if ($dumpthis == 1) { rssmi_list_the_plugins(); echo "<strong>Feeds</strong><br>"; var_dump($myfeeds); } foreach ($myfeeds as $feeditem) { $url = (string) $feeditem["FeedURL"]; while (stristr($url, 'http') != $url) { $url = substr($url, 1); } if (empty($url)) { continue; } $url = esc_url_raw(strip_tags($url)); if ($directFetch == 1) { $feed = wp_rss_fetchFeed($url, $timeout, $forceFeed); } else { $feed = fetch_feed($url); } if (is_wp_error($feed)) { if ($dumpthis == 1) { echo $feed->get_error_message(); } if ($size < 4) { return _e("You have one feed and it's not a valid RSS feed. This is likely a problem with the source of the RSS feed. Contact our support forum for help.", 'wp-rss-multi-importer'); exit; } else { //echo $feed->get_error_message(); continue; } } $maxfeed = $feed->get_item_quantity(0); if ($feedAuthor = $feed->get_author()) { $feedAuthor = $feed->get_author()->get_name(); } //SORT DEPENDING ON SETTINGS if ($sortDir == 1) { for ($i = $maxfeed - 1; $i >= $maxfeed - $maxposts; $i--) { $item = $feed->get_item($i); if (empty($item)) { continue; } if (include_post($feeditem["FeedCatID"], $item->get_content(), $item->get_title()) == 0) { continue; } // FILTER if ($enclosure = $item->get_enclosure()) { if (!IS_NULL($item->get_enclosure()->get_thumbnail())) { $mediaImage = $item->get_enclosure()->get_thumbnail(); } else { if (!IS_NULL($item->get_enclosure()->get_link())) { $mediaImage = $item->get_enclosure()->get_link(); } } } if ($itemAuthor = $item->get_author()) { $itemAuthor = $item->get_author()->get_name(); } else { if (!IS_NULL($feedAuthor)) { $itemAuthor = $feedAuthor; } } $myarray[] = array("mystrdate" => strtotime($item->get_date()), "mytitle" => $item->get_title(), "mylink" => $item->get_link(), "myGroup" => $feeditem["FeedName"], "mydesc" => $item->get_content(), "myimage" => $mediaImage, "mycatid" => $feeditem["FeedCatID"], "myAuthor" => $itemAuthor); unset($mediaImage); unset($itemAuthor); } } else { for ($i = 0; $i <= $maxposts - 1; $i++) { $item = $feed->get_item($i); if (empty($item)) { continue; } if (include_post($feeditem["FeedCatID"], $item->get_content(), $item->get_title()) == 0) { continue; } // FILTER // $x=1; if ($enclosure = $item->get_enclosure()) { if (!IS_NULL($item->get_enclosure()->get_thumbnail())) { $mediaImage = $item->get_enclosure()->get_thumbnail(); //$mediaImage=$mediaImage2[$x]; } else { if (!IS_NULL($item->get_enclosure()->get_link())) { $mediaImage = $item->get_enclosure()->get_link(); } } } if ($itemAuthor = $item->get_author()) { $itemAuthor = $item->get_author()->get_name(); } else { if (!IS_NULL($feedAuthor)) { $itemAuthor = $feedAuthor; } } $myarray[] = array("mystrdate" => strtotime($item->get_date()), "mytitle" => $item->get_title(), "mylink" => $item->get_link(), "myGroup" => $feeditem["FeedName"], "mydesc" => $item->get_content(), "myimage" => $mediaImage, "mycatid" => $feeditem["FeedCatID"], "myAuthor" => $itemAuthor); unset($mediaImage); unset($itemAuthor); } } } if ($cacheMin !== 0) { set_transient($cachename, $myarray, 60 * $cacheMin); // added for transient cache } } // added for transient cache if ($timerstop == 1) { timer_stop(1); echo ' seconds<br>'; //TIMER END for testing purposes } // CHECK $myarray BEFORE DOING ANYTHING ELSE // if ($dumpthis == 1) { echo "<br><strong>Array</strong><br>"; var_dump($myarray); return; } if (!isset($myarray) || empty($myarray)) { if (!$warnmsg == 1 && current_user_can('edit_post')) { return _e("There is a problem with the feeds you entered. Go to our <a href='http://www.allenweiss.com/faqs/im-told-the-feed-isnt-valid-or-working/'>support page</a> to see how to solve this.", 'wp-rss-multi-importer'); } return; } global $isMobileDevice; if (isset($isMobileDevice) && $isMobileDevice == 1) { //open mobile device windows in new tab $targetWindow = 2; } //$myarrary sorted by mystrdate foreach ($myarray as $key => $row) { $dates[$key] = $row["mystrdate"]; } //SORT, DEPENDING ON SETTINGS if ($sortDir == 1) { array_multisort($dates, SORT_ASC, $myarray); } else { array_multisort($dates, SORT_DESC, $myarray); } // HOW THE LINK OPENS if ($targetWindow == 0) { $openWindow = 'class="colorbox"'; } elseif ($targetWindow == 1) { $openWindow = 'target="_self"'; } else { $openWindow = 'target="_blank"'; } $total = -1; $todayStamp = 0; $idnum = 0; //for pagination $currentPage = trim($_REQUEST[pg]); $currentURL = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; $currentURL = str_replace('&pg=' . $currentPage, '', $currentURL); $currentURL = str_replace('?pg=' . $currentPage, '', $currentURL); if (strpos($currentURL, '?') == 0) { $currentURL = $currentURL . '?'; } else { $currentURL = $currentURL . '&'; } //pagination controls and parameters if (!isset($perPage)) { $perPage = 5; } $numPages = ceil(count($myarray) / $perPage); if (!$currentPage || $currentPage > $numPages) { $currentPage = 0; } $start = $currentPage * $perPage; $end = $currentPage * $perPage + $perPage; if ($pag == 1) { //set up pagination array and put into myarray foreach ($myarray as $key => $val) { if ($key >= $start && $key < $end) { $pagedData[] = $myarray[$key]; } } $myarray = $pagedData; } //end set up pagination array and put into myarray // templates checked and added here if (!isset($template) || $template == '') { return _e("One more step...go into the <a href='/wp-admin/options-general.php?page=wp_rss_multi_importer_admin&tab=setting_options'>Settings Panel and choose a Template.</a>", 'wp-rss-multi-importer'); } require WP_RSS_MULTI_TEMPLATES . $template; } //pagination controls at bottom if ($pag == 1 && $numPages > 1) { $readable .= '<div class="rssmi_pagination"><ul>'; for ($q = 0; $q < $numPages; $q++) { if ($currentPage > 0 && $q == 0) { $readable .= '<li class="prev"><a href="http://' . $currentURL . 'pg=' . ($currentPage - 1) . '">Prev</a></li>'; } if ($currentPage != $q) { $readable .= '<li><a href="http://' . $currentURL . 'pg=' . $q . '"> ' . __($q + 1, 'wp-rss-multi-importer') . '</a></li>'; } else { $readable .= '<li class="active"><a href="#">' . ($q + 1) . '</a></li>'; } if ($q == $numPages - 1 && $currentPage != $numPages - 1) { $readable .= '<li class="next"><a href="http://' . $currentURL . 'pg=' . ($currentPage + 1) . '">Next</a></li>'; } } $readable .= '</ul></div>'; } //end pagination controls at bottom return $readable; }
/** * Fetches feed items for a specific feed */ function rssmi_fetch_feed_items($post_id, $feed_total_fetch = 10) { $rssmi_global_options = get_option('rssmi_global_options'); $noDirectFetch = isset($rssmi_global_options['noForcedFeed']) ? $rssmi_global_options['noForcedFeed'] : 0; $timeout = 20; $forceFeed = true; $showVideo = 1; global $wpdb; $didUpdate = 0; $post = get_post($post_id); if ($post->post_type == 'rssmi_feed' && $post->post_status == 'publish') { // Get the feed source $query = "SELECT ID, post_date, post_title, guid FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'rssmi_feed' AND ID = {$post_id}"; $feed_source = $wpdb->get_results($query); if (!empty($feed_source)) { $feed_ID = $post_id; $feed_url = get_post_meta($post_id, 'rssmi_url', true); $feed_cat = get_post_meta($post_id, 'rssmi_cat', true); $rssmi_user = get_post_meta($post_id, 'rssmi_user', true); $rssmi_title = get_the_title($post_id); if (!empty($feed_url)) { $url = esc_url_raw(strip_tags($feed_url)); if ($noDirectFetch == 1) { $feed = fetch_feed($url); } else { $feed = wp_rss_fetchFeed($url, $timeout, $forceFeed, $showVideo); } if (!is_wp_error($feed)) { // Limit to 10 unless fetched from feed page. $maxitems = $feed->get_item_quantity($feed_total_fetch); // Build an array of all the items, starting with element 0 (first element). $items = $feed->get_items(0, $maxitems); } else { return; } } if (!empty($items)) { foreach ($items as $item) { $cleanLink = strip_qs_var_match('news.google.com', $item->get_permalink(), 'url'); // clean all parameters except the url from links from Google News $mypostids = $wpdb->get_results("select post_id from {$wpdb->postmeta} where meta_key = 'rssmi_item_permalink' and meta_value like '%" . $cleanLink . "%'"); // $myposttitle=$wpdb->get_results("select post_title from $wpdb->posts where post_type='rssmi_feed_item' and post_title like '%".mysql_real_escape_string(trim($item->get_title()))."%'"); if (empty($mypostids) && $mypostids !== false) { $didUpdate = 1; if (IS_NULL($item->get_date())) { $post_date = $rightNow; $unix_date = strtotime($rightNow); } else { $post_date = get_date_from_gmt($item->get_date('Y-m-d H:i:s')); $unix_date = $item->get_date('U'); } if (rssmi_is_not_fresh($post_date) == 1) { continue; } //filter for days old // Create post object $feed_item = array('post_title' => html_entity_decode($item->get_title()), 'post_content' => '', 'post_date' => $post_date, 'post_status' => 'publish', 'post_type' => 'rssmi_feed_item'); remove_action('save_post', 'rssmi_save_custom_fields'); $inserted_ID = wp_insert_post($feed_item); add_action('save_post', 'rssmi_save_custom_fields'); if ($feedAuthor = $item->get_author()) { $feedAuthor = $item->get_author()->get_name(); } if ($enclosure = $item->get_enclosure()) { $FeedMediaID = get_post_meta($feed_ID, 'rssmi_mediaID', true); // GET THE CHOSEN MEDIA IMAGE FROM THE ENCLOSURE $useMediaImage = $FeedMediaID > 0 ? 1 : 0; $inum = isset($FeedMediaID) ? $FeedMediaID - 1 : 0; if (!IS_NULL($item->get_enclosure()->get_thumbnails())) { $mediaImageArray = $item->get_enclosure()->get_thumbnails(); $mediaImage = $mediaImageArray[$inum]; } else { if (!IS_NULL($item->get_enclosure()->get_link())) { $mediaImage = $item->get_enclosure()->get_link(); } } } if (!IS_Null($item->get_categories())) { $categoryTerms = ""; foreach ($item->get_categories() as $category) { $categoryTerms .= $category->get_term() . ', '; } $postCategories = rtrim($categoryTerms, ', '); } else { $postCategories = Null; } if ($itemAuthor = $item->get_author()) { $itemAuthor = !IS_NULL($item->get_author()->get_name()) ? $item->get_author()->get_name() : $item->get_author()->get_email(); $itemAuthor = html_entity_decode($itemAuthor, ENT_QUOTES, 'UTF-8'); } else { if (!IS_NULL($feedAuthor)) { $itemAuthor = $feedAuthor; $itemAuthor = html_entity_decode($itemAuthor, ENT_QUOTES, 'UTF-8'); } } $myarray[] = array("mystrdate" => strtotime($post_date), "mytitle" => html_entity_decode($item->get_title()), "mylink" => $item->get_permalink(), "mydesc" => $item->get_content(), "myimage" => $mediaImage, "myAuthor" => $itemAuthor, "itemcategory" => $postCategories, "mycatid" => $feed_cat, "myGroup" => $rssmi_title, "feedID" => $feed_ID, "useMediaImage" => $useMediaImage); unset($mediaImage); unset($itemAuthor); unset($useMediaImage); unset($post_date); unset($rssmi_title); unset($feed_cat); update_post_meta($inserted_ID, 'rssmi_item_permalink', $cleanLink); update_post_meta($inserted_ID, 'rssmi_item_description', $myarray); update_post_meta($inserted_ID, 'rssmi_item_date', $unix_date); // Save as Unix timestamp format update_post_meta($inserted_ID, 'rssmi_item_feed_id', $post_id); unset($myarray); unset($unix_date); unset($cleanLink); } //end if } //end foreach } // end if } // end if not empty if ($didUpdate == 1) { update_post_meta($feed_ID, 'rssmi_last_update', time()); } } // end if }