summaryrefslogtreecommitdiff
path: root/rss_lib.php
diff options
context:
space:
mode:
Diffstat (limited to 'rss_lib.php')
-rw-r--r--rss_lib.php443
1 files changed, 0 insertions, 443 deletions
diff --git a/rss_lib.php b/rss_lib.php
deleted file mode 100644
index 1efe82d..0000000
--- a/rss_lib.php
+++ /dev/null
@@ -1,443 +0,0 @@
-<?php
-/**
- * @version $Header$
- * @package rss
- *
- * Copyright (c) 2004 bitweaver.org
- * Copyright (c) 2003 tikwiki.org
- * Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al.
- * All Rights Reserved. See below for details and a complete list of authors.
- * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details
- *
- * $Id$
- */
-
-/**
- * @package rss
- */
-class RSSLib extends BitBase {
-
- function list_rss_modules($offset, $max_records, $sort_mode, $find) {
-
- if ($find) {
- $findesc="%" . $find . "%";
- $mid = " where (`name` like ? or `description` like ?)";
- $bindvars=array($findesc,$findesc);
- } else {
- $mid = "";
- $bindvars=array();
- }
-
- $query = "select * from `".BIT_DB_PREFIX."rss_modules` $mid order by ".$this->mDb->convertSortmode($sort_mode);
- $query_cant = "select count(*) from `".BIT_DB_PREFIX."rss_modules` $mid";
- $result = $this->mDb->query($query,$bindvars,$max_records,$offset);
- $cant = $this->mDb->getOne($query_cant,$bindvars);
- $ret = array();
-
- while ($res = $result->fetchRow()) {
- $res["minutes"] = $res["refresh"] / 60;
-
- $ret[] = $res;
- }
-
- $retval = array();
- $retval["data"] = $ret;
- $retval["cant"] = $cant;
- return $retval;
- }
-
- function replace_rss_module($rss_id, $name, $description, $url, $refresh, $show_title, $show_pub_date) {
- $ret = FALSE;
- if( is_numeric( $rss_id ) ) {
- //if($this->rss_module_name_exists($name)) return false; // TODO: Check the name
- $refresh = 60 * $refresh;
-
- if ($rss_id) {
- $query = "update `".BIT_DB_PREFIX."rss_modules` set `name`=?,`description`=?,`refresh`=?,`url`=?,`show_title`=?,`show_pub_date`=? where `rss_id`=?";
- $bindvars=array($name,$description,$refresh,$url,$show_title,$show_pub_date,$rss_id);
- } else {
- // was: replace into, no clue why.
- $query = "insert into `".BIT_DB_PREFIX."rss_modules`(`name`,`description`,`url`,`refresh`,`content`,`last_updated`,`show_title`,`show_pub_date`)
- values(?,?,?,?,?,?,?,?)";
- $bindvars=array($name,$description,$url,$refresh,'',1000000,$show_title,$show_pub_date);
- }
-
- $result = $this->mDb->query($query,$bindvars);
- $ret = true;
- }
- return $ret;
- }
-
- function remove_rss_module($rss_id) {
- $ret = FALSE;
- if( is_numeric( $rss_id ) ) {
- $query = "delete from `".BIT_DB_PREFIX."rss_modules` where `rss_id`=?";
-
- $result = $this->mDb->query($query,array($rss_id));
- $ret = true;
- }
- return $ret;
- }
-
- function get_rss_module($rss_id) {
- $ret = FALSE;
- if( is_numeric( $rss_id ) ) {
- $query = "select * from `".BIT_DB_PREFIX."rss_modules` where `rss_id`=?";
-
- $result = $this->mDb->query($query,array($rss_id));
-
- if (!$result->numRows())
- return false;
-
- $ret = $result->fetchRow();
- }
- return $ret;
- }
-
- function startElementHandler($parser, $name, $attribs) {
- if ($this->flag) {
- $this->buffer .= '<' . $name . '>';
- }
-
- if ($name == 'item' || $name == 'items') {
- $this->flag = 1;
- }
- }
-
- function endElementHandler($parser, $name) {
- if ($name == 'item' || $name == 'items') {
- $this->flag = 0;
- }
-
- if ($this->flag) {
- $this->buffer .= '</' . $name . '>';
- }
- }
-
- function characterDataHandler($parser, $data) {
- if ($this->flag) {
- $this->buffer .= $data;
- }
- }
-
- /* DEPRECATED - SLATED FOR REMOVAL
- * We now get content from SimplePie parser via parse_feeds below
- * -wjames5
- */
- /*
- function NewsFeed($data, $rss_id) {
- $news = array();
- if( is_numeric( $rss_id ) ) {
-
- $show_pub_date = $this->get_rss_show_pub_date($rss_id);
-
- $this->buffer = '';
- $this->flag = 0;
- $this->parser = xml_parser_create("UTF-8");
- xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
- xml_set_object($this->parser, $this);
- xml_set_element_handler($this->parser, "startElementHandler", "endElementHandler");
- xml_set_character_data_handler($this->parser, "characterDataHandler");
-
- if (!xml_parse($this->parser, $data, 1)) {
-# print ("<!-- XML Parse error at " . xml_get_current_line_number($this->parser) . ": "
-# . xml_error_string(xml_get_error_code($this->parser)) . " -->\n");
- $news[] = array('title'=>
- "XML Parse error at " . xml_get_current_line_number($this->parser) . ": "
- . xml_error_string(xml_get_error_code($this->parser)) . "",
- 'link'=>'',
- 'pubdate'=>'',
- );
- return $news;
- }
-
- xml_parser_free ($this->parser);
- preg_match_all("/<title>(.*?)<\/title>/i", $this->buffer, $titles);
- preg_match_all("/<author>(.*?)<\/author>/i", $this->buffer, $author);
- preg_match_all("/<link>(.*?)<\/link>/i", $this->buffer, $links);
- preg_match_all("/<description>(.*?)<\/description>/i", $this->buffer, $description);
-
- $pubdate = array();
- preg_match_all("/<dc:date>(.*?)<\/dc:date>/i", $this->buffer, $pubdate);
- if (count($pubdate[1])<1)
- preg_match_all("/<pubDate>(.*?)<\/pubDate>/i", $this->buffer, $pubdate);
-
- for ($i = 0; $i < count($titles[1]); $i++) {
- $anew["title"] = $titles[1][$i];
-
- if (isset($author[1][$i])) {
- $anew["author"] = $author[1][$i];
- } else {
- $anew["author"] = '';
- }
- if (isset($description[1][$i])) {
- $anew["description"] = $description[1][$i];
- }else{
- $anew["description"] = '';
- }
- if (isset($links[1][$i])) {
- $anew["link"] = $links[1][$i];
- } else {
- $anew["link"] = '';
- }
- if ( isset($pubdate[1][$i]) && ($show_pub_date == 'y') )
- {
- $anew["pubdate"] = $pubdate[1][$i];
- } else {
- $anew["pubdate"] = '';
- }
- $news[] = $anew;
- }
- }
- return $news;
- }
- */
-
- /* DEPRECATED - SLATED FOR REMOVAL
- * We now get content from SimplePie parser via parse_feeds below
- * -wjames5
- */
- /*
- function parse_rss_data($rssdata, $rss_id) {
- return $this->NewsFeed($rssdata, $rss_id);
- }
- */
-
- function refresh_rss_module($rss_id) {
- $info = $this->get_rss_module($rss_id);
-
- if ($info) {
- global $gBitSystem;
- $data = $this->rss_iconv( bit_http_request($info['url']));
- $now = $gBitSystem->getUTCTime();
- $query = "update `".BIT_DB_PREFIX."rss_modules` set `content`=?, `last_updated`=? where `rss_id`=?";
- $result = $this->mDb->query($query,array((string)$data,(int) $now, (int) $rss_id));
- return $data;
- } else {
- return false;
- }
- }
-
- function rss_module_name_exists($name) {
- $query = "select `name` from `".BIT_DB_PREFIX."rss_modules` where `name`=?";
-
- $result = $this->mDb->query($query,array($name));
- return $result->numRows();
- }
-
- function get_rss_module_id($name) {
- $query = "select `rss_id` from `".BIT_DB_PREFIX."rss_modules` where `name`=?";
-
- $id = $this->mDb->getOne($query,array($name));
- return $id;
- }
-
- function get_rss_show_title($rss_id) {
- $ret = FALSE;
- if( is_numeric( $rss_id ) ) {
- $query = "select `show_title` from `".BIT_DB_PREFIX."rss_modules` where `rss_id`=?";
-
- $ret = $this->mDb->getOne($query,array($rss_id));
- }
- return $ret;
- }
-
- function get_rss_show_pub_date($rss_id) {
- $ret = FALSE;
- if( is_numeric( $rss_id ) ) {
- $query = "select `show_pub_date` from `".BIT_DB_PREFIX."rss_modules` where `rss_id`=?";
-
- $show_pub_date = $this->mDb->getOne($query,array($rss_id));
- $ret = $show_pub_date;
- }
- return $ret;
- }
-
- /* DEPRECATED - SLATED FOR REMOVAL
- * We now get content from SimplePie parser via parse_feeds below
- * -wjames5
- */
- /*
- function get_rss_module_content($rss_id) {
- $ret = FALSE;
- if( is_numeric( $rss_id ) ) {
-
- if( $info = $this->get_rss_module($rss_id) ) {
- global $gBitSystem;
- $now = $gBitSystem->getUTCTime();
-
- // if ($info["last_updated"] + $info["refresh"] < $now) {
- $data = $this->refresh_rss_module($rss_id);
- // }
-
- $info = $this->get_rss_module($rss_id);
- $ret = $info["content"];
- }
- }
- return $ret;
- }
- */
-
- function rss_iconv($xmlstr, $tencod = "UTF-8") {
- if (preg_match("/<\?xml.*encoding=\"(.*)\".*\?>/", $xmlstr, $xml_head)) {
- $sencod = strtoupper($xml_head[1]);
-
- switch ($sencod) {
- case "ISO-8859-1":
- // Use utf8_encode a more standard function
- $xmlstr = utf8_encode($xmlstr);
-
- break;
-
- case "UTF-8":
- case "US-ASCII":
- // UTF-8 and US-ASCII don't need convertion
- break;
-
- default:
- // Not supported encoding, we must use iconv() or recode()
- if (function_exists('iconv')) {
- // We have iconv use it
- $new_xmlstr = @iconv($sencod, $tencod, $xmlstr);
-
- if ($new_xmlstr === FALSE) {
- // in_encod -> out_encod not supported, may be misspelled encoding
- $sencod = strtr($sencod, array(
- "-" => "",
- "_" => "",
- " " => ""
- ));
-
- $new_xmlstr = @iconv($sencod, $tencod, $xmlstr);
-
- if ($new_xmlstr === FALSE) {
- // in_encod -> out_encod not supported, leave it
- $tencod = $sencod;
-
- break;
- }
- }
-
- $xmlstr = $new_xmlstr;
- // Fix an iconv bug, a few garbage chars beyound xml...
- $xmlstr = preg_replace("/(.*<\/rdf:RDF>).*/s", "\$1", $xmlstr);
- } elseif (function_exists('recode_string')) {
- // I don't have recode support could somebody test it?
- $xmlstr = @recode_string("$sencod..$tencod", $xmlstr);
- } else {
- // This PHP intallation don't have any EncodConvFunc...
- // somebody could create bit_iconv(...)?
- }
- }
-
- // Replace header, put the new encoding
- $xmlstr = preg_replace("/(<\?xml.*)encoding=\".*\"(.*\?>)/", "\$1 encoding=\"$tencod\"\$2", $xmlstr);
- }
-
- return $xmlstr;
- }
-
- function get_short_desc( $text ){
- // first we can remove unwanted stuff like images and lists or whatever - this is rough
- $pattern = array(
- "!<img[^>]*>!is",
- //"!<ul.*?</ul>!is",
- );
- $text = preg_replace( $pattern, "", $text );
-
- $text = substr($text, 0, 1000);
-
- // now we strip remaining tags and xs whitespace
- $text = trim( preg_replace( "!\s+!s", " ", strip_tags( $text )));
-
- // finally we try to extract sentences as well as we can
- // to add more characters to split sentences by add them after the last \? - you might want to add : or ;
- preg_match_all( "#([\.!\?\s\)]*)(.*?[a-zA-Z]{2}\s*[\.\!\?]+\)?)#s", $text, $matches );
-
- return $matches[2];
- }
-
- function get_short_descs( $items, $length=1 ){
- $shortdescs = Array();
-
- if ( !empty($items) ){
- foreach ($items as $item){
- //we try to trim each story to given number of sentences
- $sentences = $this->get_short_desc( $item->get_description() );
-
- $shortdesc = NULL;
- for ($n = 0; $n < $length; $n++){
- $space = ($n > 0)?" ":NULL;
- $shortdesc .= $space;
- $shortdesc .= ( !empty( $sentences[$n] ) && $sentences[$n] != NULL ) ? $sentences[$n] : NULL;
- }
-
- $shortdescs[] = $shortdesc;
- }
- }
-
- return $shortdescs;
- }
-
- function parse_feeds( $pParamHash ){
- //set path to rss feed cache
- $cache_path = TEMP_PKG_PATH.'rss/simplepie';
-
- //we do this earlier instead of later because if we can't cache the source we shouldn't be pulling the rss feed.
- if( !is_dir( $cache_path ) && !mkdir_p( $cache_path ) ) {
- bit_error_log( 'Can not create the cache directory: '.$cache_path );
-
- return FALSE;
- }else{
- //load up parser SimplePie
- require_once( UTIL_PKG_INCLUDE_PATH.'simplepie/simplepie.inc' );
-
- if (!is_array($pParamHash['id'])){
- $ids = explode( ",", $pParamHash['id'] );
- }else{
- $ids = $pParamHash['id'];
- }
-
- $urls = Array();
-
- foreach ($ids as $id){
- if( @BitBase::verifyId( $id ) ) {
- $feedHash = $this->get_rss_module( $id );
- $urls[] = $feedHash['url'];
- }else{
- //todo assign this as an error
- //$repl = '<b>rss can not be found, id must be a number</b>';
- }
- }
-
- $feed = new SimplePie();
-
- //Instead of only passing in one feed url, we'll pass in an array of multiple feeds
- $feed->set_feed_url( $urls );
-
- $feed->set_cache_location( $cache_path );
-
- //set cache time
- $cache_time = !empty($pParamHash['cache_time'])?$pParamHash['cache_time']:1;
- $feed->set_cache_duration( $cache_time );
-
- //not sure - we may want to eventually use this
- //$feed->set_stupidly_fast(TRUE);
-
- // Initialize the feed object
- $feed->init();
-
- // This will work if all of the feeds accept the same settings.
- $feed->handle_content_type();
-
- $items = $feed->get_items();
-
- return $items;
- }
- }
-}
-
-global $rsslib;
-$rsslib = new RSSLib();
-
-?>