From 437a6f699ed0a82882aadafd410cc01c9f237b61 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sat, 17 Dec 2011 12:38:34 +0100 Subject: [PATCH] Rss reader use the timeout and proxy if setup --- htdocs/core/class/rssparser.class.php | 722 ++++++++++++++------------ 1 file changed, 382 insertions(+), 340 deletions(-) diff --git a/htdocs/core/class/rssparser.class.php b/htdocs/core/class/rssparser.class.php index cdcbcbd7282..bf2a428ae96 100755 --- a/htdocs/core/class/rssparser.class.php +++ b/htdocs/core/class/rssparser.class.php @@ -1,19 +1,19 @@ * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +*/ /** * \file htdocs/core/class/rssparser.class.php @@ -25,116 +25,150 @@ class RssParser var $db; var $error; - protected $_format=''; - protected $_urlRSS; - protected $_language; - protected $_generator; - protected $_copyright; - protected $_lastbuilddate; - protected $_imageurl; - protected $_link; - protected $_title; - protected $_description; - protected $_lastfetchdate; // Last successful fetch - protected $_rssarray=array(); + protected $_format=''; + protected $_urlRSS; + protected $_language; + protected $_generator; + protected $_copyright; + protected $_lastbuilddate; + protected $_imageurl; + protected $_link; + protected $_title; + protected $_description; + protected $_lastfetchdate; // Last successful fetch + protected $_rssarray=array(); - // Accessors - public function getFormat() { return $this->_format; } - public function getUrlRss() { return $this->_urlRSS; } - public function getLanguage() { return $this->_language; } - public function getGenerator() { return $this->_generator; } - public function getCopyright() { return $this->_copyright; } - public function getLastBuildDate() { return $this->_lastbuilddate; } - public function getImageUrl() { return $this->_imageurl; } - public function getLink() { return $this->_link; } - public function getTitle() { return $this->_title; } - public function getDescription() { return $this->_description; } - public function getLastFetchDate() { return $this->_lastfetchdate; } - public function getItems() { return $this->_rssarray; } + // Accessors + public function getFormat() { + return $this->_format; + } + public function getUrlRss() { + return $this->_urlRSS; + } + public function getLanguage() { + return $this->_language; + } + public function getGenerator() { + return $this->_generator; + } + public function getCopyright() { + return $this->_copyright; + } + public function getLastBuildDate() { + return $this->_lastbuilddate; + } + public function getImageUrl() { + return $this->_imageurl; + } + public function getLink() { + return $this->_link; + } + public function getTitle() { + return $this->_title; + } + public function getDescription() { + return $this->_description; + } + public function getLastFetchDate() { + return $this->_lastfetchdate; + } + public function getItems() { + return $this->_rssarray; + } - // For parsing with xmlparser + // For parsing with xmlparser var $stack = array(); // parser stack var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright'); - /** - * Constructor - * - * @param DoliDB $db Database handler - */ - public function RssParser($db) - { - $this->db=$db; - } + /** + * Constructor + * + * @param DoliDB $db Database handler + */ + public function RssParser($db) + { + $this->db=$db; + } - /** - * Parse rss URL - * - * @param urlRSS Url to parse - * @param maxNb Max nb of records to get (0 for no limit) - * @param cachedelay 0=No cache, nb of seconds we accept cache files (cachedir must also be defined) - * @param cachedir Directory where to save cache file - * @return int <0 if KO, >0 if OK - */ - public function parser($urlRSS, $maxNb=0, $cachedelay=60, $cachedir='') - { - include_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); + /** + * Parse rss URL + * + * @param urlRSS Url to parse + * @param maxNb Max nb of records to get (0 for no limit) + * @param cachedelay 0=No cache, nb of seconds we accept cache files (cachedir must also be defined) + * @param cachedir Directory where to save cache file + * @return int <0 if KO, >0 if OK + */ + public function parser($urlRSS, $maxNb=0, $cachedelay=60, $cachedir='') + { + global $conf; - $str=''; // This will contain content of feed + include_once(DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'); - // Check parameters - if (! dol_is_url($urlRSS)) - { - $this->error="ErrorBadUrl"; - return -1; - } + $str=''; // This will contain content of feed - $this->_urlRSS = $urlRSS; - $newpathofdestfile=$cachedir.'/'.dol_hash($this->_urlRSS); - $newmask='0644'; - - //dol_syslog("RssPArser::parser parse url=".$urlRSS." => cache file=".$newpathofdestfile); - $nowgmt = dol_now(); - - // Search into cache - $foundintocache=0; - if ($cachedelay > 0 && $cachedir) + // Check parameters + if (! dol_is_url($urlRSS)) { - $filedate=dol_filemtime($newpathofdestfile); - if ($filedate >= ($nowgmt - $cachedelay)) - { - //dol_syslog("RssParser::parser cache file ".$newpathofdestfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay.") so we use it."); - $foundintocache=1; - - $this->_lastfetchdate=$filedate; - } - else - { - dol_syslog("RssParser::parser cache file ".$newpathofdestfile." is not found or older than now - cachedelay (".$nowgmt." - ".$cachedelay.") so we can't use it."); - } + $this->error="ErrorBadUrl"; + return -1; } - // Load file into $str - if ($foundintocache) // Cache file found and is not too old - { - $str = file_get_contents($newpathofdestfile); - } - else - { - try { - ini_set("user_agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"); - ini_set("max_execution_time", 10); - $str = file_get_contents($this->_urlRSS); - } - catch (Exception $e) { - print 'Error retrieving URL '.$this->urlRSS.' - '.$e->getMessage(); - } - } + $this->_urlRSS = $urlRSS; + $newpathofdestfile=$cachedir.'/'.dol_hash($this->_urlRSS); + $newmask='0644'; - // Convert $str into xml - if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) + //dol_syslog("RssPArser::parser parse url=".$urlRSS." => cache file=".$newpathofdestfile); + $nowgmt = dol_now(); + + // Search into cache + $foundintocache=0; + if ($cachedelay > 0 && $cachedir) + { + $filedate=dol_filemtime($newpathofdestfile); + if ($filedate >= ($nowgmt - $cachedelay)) + { + //dol_syslog("RssParser::parser cache file ".$newpathofdestfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay.") so we use it."); + $foundintocache=1; + + $this->_lastfetchdate=$filedate; + } + else + { + dol_syslog("RssParser::parser cache file ".$newpathofdestfile." is not found or older than now - cachedelay (".$nowgmt." - ".$cachedelay.") so we can't use it."); + } + } + + // Load file into $str + if ($foundintocache) // Cache file found and is not too old + { + $str = file_get_contents($newpathofdestfile); + } + else + { + try { + ini_set("user_agent","Dolibarr ERP-CRM RSS reader"); + ini_set("max_execution_time", $conf->global->MAIN_USE_RESPONSE_TIMEOUT); + ini_set("default_socket_timeout", $conf->global->MAIN_USE_RESPONSE_TIMEOUT); + + $opts = array('http'=>array('method'=>"GET")); + if (! empty($conf->global->MAIN_USE_CONNECT_TIMEOUT)) $opts['http']['timeout']=$conf->global->MAIN_USE_CONNECT_TIMEOUT; + if (! empty($conf->global->MAIN_PROXY_USE)) $opts['http']['proxy']='tcp://'.$conf->global->MAIN_PROXY_HOST.':'.$conf->global->MAIN_PROXY_PORT; + //var_dump($opts);exit; + $context = stream_context_create($opts); + + $str = file_get_contents($this->_urlRSS, false, $context); + } + catch (Exception $e) { + print 'Error retrieving URL '.$this->urlRSS.' - '.$e->getMessage(); + } + } + + // Convert $str into xml + if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { //print 'xx'.LIBXML_NOCDATA; libxml_use_internal_errors(false); @@ -143,7 +177,9 @@ class RssParser else { $xmlparser=xml_parser_create(''); - if (!is_resource($xmlparser)) { $this->error="ErrorFailedToCreateParser"; return -1; } + if (!is_resource($xmlparser)) { + $this->error="ErrorFailedToCreateParser"; return -1; + } xml_set_object($xmlparser, $this); xml_set_element_handler($xmlparser, 'feed_start_element', 'feed_end_element' ); @@ -154,185 +190,191 @@ class RssParser //var_dump($rss->_format);exit; } - // If $rss loaded - if ($rss) - { - // Save file into cache - if (empty($foundintocache) && $cachedir) - { - dol_syslog("RssParser::parser cache file ".$newpathofdestfile." is saved onto disk."); - if (! dol_is_dir($cachedir)) dol_mkdir($cachedir); - $fp = fopen($newpathofdestfile, 'w'); + // If $rss loaded + if ($rss) + { + // Save file into cache + if (empty($foundintocache) && $cachedir) + { + dol_syslog("RssParser::parser cache file ".$newpathofdestfile." is saved onto disk."); + if (! dol_is_dir($cachedir)) dol_mkdir($cachedir); + $fp = fopen($newpathofdestfile, 'w'); fwrite($fp, $str); fclose($fp); - if (! empty($conf->global->MAIN_UMASK)) $newmask=$conf->global->MAIN_UMASK; - @chmod($newpathofdestfile, octdec($newmask)); + if (! empty($conf->global->MAIN_UMASK)) $newmask=$conf->global->MAIN_UMASK; + @chmod($newpathofdestfile, octdec($newmask)); - $this->_lastfetchdate=$nowgmt; - } + $this->_lastfetchdate=$nowgmt; + } - unset($str); // Free memory + unset($str); // Free memory - if (empty($rss->_format)) // If format not detected automatically - { - $rss->_format='rss'; - if (empty($rss->channel)) $rss->_format='atom'; - } + if (empty($rss->_format)) // If format not detected automatically + { + $rss->_format='rss'; + if (empty($rss->channel)) $rss->_format='atom'; + } - $items=array(); + $items=array(); - // Save description entries - if ($rss->_format == 'rss') - { - //var_dump($rss); - if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) - { - if (!empty($rss->channel->language)) $this->_language = (string) $rss->channel->language; - if (!empty($rss->channel->generator)) $this->_generator = (string) $rss->channel->generator; - if (!empty($rss->channel->copyright)) $this->_copyright = (string) $rss->channel->copyright; - if (!empty($rss->channel->lastbuilddate)) $this->_lastbuilddate = (string) $rss->channel->lastbuilddate; - if (!empty($rss->channel->image->url[0])) $this->_imageurl = (string) $rss->channel->image->url[0]; - if (!empty($rss->channel->link)) $this->_link = (string) $rss->channel->link; - if (!empty($rss->channel->title)) $this->_title = (string) $rss->channel->title; - if (!empty($rss->channel->description)) $this->_description = (string) $rss->channel->description; - } - else - { - //var_dump($rss->channel); - if (!empty($rss->channel['language'])) $this->_language = (string) $rss->channel['language']; - if (!empty($rss->channel['generator'])) $this->_generator = (string) $rss->channel['generator']; - if (!empty($rss->channel['copyright'])) $this->_copyright = (string) $rss->channel['copyright']; - if (!empty($rss->channel['lastbuilddate'])) $this->_lastbuilddate = (string) $rss->channel['lastbuilddate']; - if (!empty($rss->image['url'])) $this->_imageurl = (string) $rss->image['url']; - if (!empty($rss->channel['link'])) $this->_link = (string) $rss->channel['link']; - if (!empty($rss->channel['title'])) $this->_title = (string) $rss->channel['title']; - if (!empty($rss->channel['description'])) $this->_description = (string) $rss->channel['description']; - } + // Save description entries + if ($rss->_format == 'rss') + { + //var_dump($rss); + if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) + { + if (!empty($rss->channel->language)) $this->_language = (string) $rss->channel->language; + if (!empty($rss->channel->generator)) $this->_generator = (string) $rss->channel->generator; + if (!empty($rss->channel->copyright)) $this->_copyright = (string) $rss->channel->copyright; + if (!empty($rss->channel->lastbuilddate)) $this->_lastbuilddate = (string) $rss->channel->lastbuilddate; + if (!empty($rss->channel->image->url[0])) $this->_imageurl = (string) $rss->channel->image->url[0]; + if (!empty($rss->channel->link)) $this->_link = (string) $rss->channel->link; + if (!empty($rss->channel->title)) $this->_title = (string) $rss->channel->title; + if (!empty($rss->channel->description)) $this->_description = (string) $rss->channel->description; + } + else + { + //var_dump($rss->channel); + if (!empty($rss->channel['language'])) $this->_language = (string) $rss->channel['language']; + if (!empty($rss->channel['generator'])) $this->_generator = (string) $rss->channel['generator']; + if (!empty($rss->channel['copyright'])) $this->_copyright = (string) $rss->channel['copyright']; + if (!empty($rss->channel['lastbuilddate'])) $this->_lastbuilddate = (string) $rss->channel['lastbuilddate']; + if (!empty($rss->image['url'])) $this->_imageurl = (string) $rss->image['url']; + if (!empty($rss->channel['link'])) $this->_link = (string) $rss->channel['link']; + if (!empty($rss->channel['title'])) $this->_title = (string) $rss->channel['title']; + if (!empty($rss->channel['description'])) $this->_description = (string) $rss->channel['description']; + } - if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) $items=$rss->channel->item; // With simplexml - else $items=$rss->items; // With xmlparse - //var_dump($items);exit; - } - else if ($rss->_format == 'atom') - { - //var_dump($rss); - if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) - { - if (!empty($rss->generator)) $this->_generator = (string) $rss->generator; - if (!empty($rss->lastbuilddate)) $this->_lastbuilddate = (string) $rss->modified; - if (!empty($rss->link->href)) $this->_link = (string) $rss->link->href; - if (!empty($rss->title)) $this->_title = (string) $rss->title; - if (!empty($rss->description)) $this->_description = (string) $rss->description; - } - else - { - //if (!empty($rss->channel['rss_language'])) $this->_language = (string) $rss->channel['rss_language']; - if (!empty($rss->channel['generator'])) $this->_generator = (string) $rss->channel['generator']; - //if (!empty($rss->channel['rss_copyright'])) $this->_copyright = (string) $rss->channel['rss_copyright']; - if (!empty($rss->channel['modified'])) $this->_lastbuilddate = (string) $rss->channel['modified']; - //if (!empty($rss->image['rss_url'])) $this->_imageurl = (string) $rss->image['rss_url']; - if (!empty($rss->channel['link'])) $this->_link = (string) $rss->channel['link']; - if (!empty($rss->channel['title'])) $this->_title = (string) $rss->channel['title']; - //if (!empty($rss->channel['rss_description'])) $this->_description = (string) $rss->channel['rss_description']; - } - if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { $tmprss=xml2php($rss); $items=$tmprss['entry'];} // With simplexml - else $items=$rss->items; // With xmlparse - //var_dump($items);exit; - } + if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) $items=$rss->channel->item; // With simplexml + else $items=$rss->items; // With xmlparse + //var_dump($items);exit; + } + else if ($rss->_format == 'atom') + { + //var_dump($rss); + if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) + { + if (!empty($rss->generator)) $this->_generator = (string) $rss->generator; + if (!empty($rss->lastbuilddate)) $this->_lastbuilddate = (string) $rss->modified; + if (!empty($rss->link->href)) $this->_link = (string) $rss->link->href; + if (!empty($rss->title)) $this->_title = (string) $rss->title; + if (!empty($rss->description)) $this->_description = (string) $rss->description; + } + else + { + //if (!empty($rss->channel['rss_language'])) $this->_language = (string) $rss->channel['rss_language']; + if (!empty($rss->channel['generator'])) $this->_generator = (string) $rss->channel['generator']; + //if (!empty($rss->channel['rss_copyright'])) $this->_copyright = (string) $rss->channel['rss_copyright']; + if (!empty($rss->channel['modified'])) $this->_lastbuilddate = (string) $rss->channel['modified']; + //if (!empty($rss->image['rss_url'])) $this->_imageurl = (string) $rss->image['rss_url']; + if (!empty($rss->channel['link'])) $this->_link = (string) $rss->channel['link']; + if (!empty($rss->channel['title'])) $this->_title = (string) $rss->channel['title']; + //if (!empty($rss->channel['rss_description'])) $this->_description = (string) $rss->channel['rss_description']; + } + if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { + $tmprss=xml2php($rss); $items=$tmprss['entry']; + } // With simplexml + else $items=$rss->items; // With xmlparse + //var_dump($items);exit; + } - $i = 0; - // Loop on each record - foreach($items as $item) - { - //var_dump($item);exit; - if ($rss->_format == 'rss') - { - if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) - { - $itemLink = (string) $item->link; - $itemTitle = (string) $item->title; - $itemDescription = (string) $item->description; - $itemPubDate = (string) $item->pubDate; - $itemId = ''; - $itemAuthor = ''; - } - else - { - $itemLink = (string) $item['link']; - $itemTitle = (string) $item['title']; - $itemDescription = (string) $item['description']; - $itemPubDate = (string) $item['pubdate']; - $itemId = (string) $item['guid']; - $itemAuthor = (string) $item['author']; - } + $i = 0; - // Loop on each category - $itemCategory=array(); - if (is_array($item->category)) - { - foreach ($item->category as $cat) - { - $itemCategory[] = (string) $cat; - } - } - } - else if ($rss->_format == 'atom') - { - if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) - { - $itemLink = (string) $item['link']['href']; - $itemTitle = (string) $item['title']; - $itemDescription = (string) $item['summary']; - $itemPubDate = (string) $item['created']; - $itemId = (string) $item['id']; - $itemAuthor = (string) ($item['author']?$item['author']:$item['author_name']); - } - else - { - $itemLink = (string) $item['link']['href']; - $itemTitle = (string) $item['title']; - $itemDescription = (string) $item['summary']; - $itemPubDate = (string) $item['created']; - $itemId = (string) $item['id']; - $itemAuthor = (string) ($item['author']?$item['author']:$item['author_name']); - } - } - else print 'ErrorBadFeedFormat'; + // Loop on each record + if (is_array($items)) + { + foreach($items as $item) + { + //var_dump($item);exit; + if ($rss->_format == 'rss') + { + if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) + { + $itemLink = (string) $item->link; + $itemTitle = (string) $item->title; + $itemDescription = (string) $item->description; + $itemPubDate = (string) $item->pubDate; + $itemId = ''; + $itemAuthor = ''; + } + else + { + $itemLink = (string) $item['link']; + $itemTitle = (string) $item['title']; + $itemDescription = (string) $item['description']; + $itemPubDate = (string) $item['pubdate']; + $itemId = (string) $item['guid']; + $itemAuthor = (string) $item['author']; + } - // Add record to result array - $this->_rssarray[$i] = array( - 'link'=>$itemLink, - 'title'=>$itemTitle, - 'description'=>$itemDescription, - 'pubDate'=>$itemPubDate, - 'category'=>$itemCategory, - 'id'=>$itemId, - 'author'=>$itemAuthor); - //var_dump($this->_rssarray); + // Loop on each category + $itemCategory=array(); + if (is_array($item->category)) + { + foreach ($item->category as $cat) + { + $itemCategory[] = (string) $cat; + } + } + } + else if ($rss->_format == 'atom') + { + if (! empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) + { + $itemLink = (string) $item['link']['href']; + $itemTitle = (string) $item['title']; + $itemDescription = (string) $item['summary']; + $itemPubDate = (string) $item['created']; + $itemId = (string) $item['id']; + $itemAuthor = (string) ($item['author']?$item['author']:$item['author_name']); + } + else + { + $itemLink = (string) $item['link']['href']; + $itemTitle = (string) $item['title']; + $itemDescription = (string) $item['summary']; + $itemPubDate = (string) $item['created']; + $itemId = (string) $item['id']; + $itemAuthor = (string) ($item['author']?$item['author']:$item['author_name']); + } + } + else print 'ErrorBadFeedFormat'; - $i++; + // Add record to result array + $this->_rssarray[$i] = array( + 'link'=>$itemLink, + 'title'=>$itemTitle, + 'description'=>$itemDescription, + 'pubDate'=>$itemPubDate, + 'category'=>$itemCategory, + 'id'=>$itemId, + 'author'=>$itemAuthor); + //var_dump($this->_rssarray); - if ($i > $maxNb) break; // We get all records we want - } + $i++; - return 1; - } - else - { - $this->error='ErrorFailedToLoadRSSFile'; - return -1; - } - } + if ($i > $maxNb) break; // We get all records we want + } + } + + return 1; + } + else + { + $this->error='ErrorFailedToLoadRSSFile'; + return -1; + } + } - /** - * Triggered when opened tag is found - * - * @param $p - * @param $element Tag - * @param $attrs Attributes of tags - */ + /** + * Triggered when opened tag is found + * + * @param $p + * @param $element Tag + * @param $attrs Attributes of tags + */ function feed_start_element($p, $element, &$attrs) { $el = $element = strtolower($element); @@ -381,17 +423,17 @@ class RssParser // if we're in the default namespace of an RSS feed, // record textinput or image fields elseif ( - $this->_format == 'rss' and - $this->current_namespace == '' and - $el == 'textinput' ) + $this->_format == 'rss' and + $this->current_namespace == '' and + $el == 'textinput' ) { $this->intextinput = true; } elseif ( - $this->_format == 'rss' and - $this->current_namespace == '' and - $el == 'image' ) + $this->_format == 'rss' and + $this->current_namespace == '' and + $el == 'image' ) { $this->inimage = true; } @@ -414,9 +456,9 @@ class RssParser { // if tags are inlined, then flatten $attrs_str = join(' ', - array_map('map_attrs', - array_keys($attrs), - array_values($attrs) ) ); + array_map('map_attrs', + array_keys($attrs), + array_values($attrs) ) ); $this->append_content("<$element $attrs_str>" ); @@ -446,12 +488,12 @@ class RssParser } - /** - * Triggered when CDATA is found - * - * @param $p - * @param $text Tag - */ + /** + * Triggered when CDATA is found + * + * @param $p + * @param $text Tag + */ function feed_cdata($p, $text) { if ($this->_format == 'atom' and $this->incontent) @@ -464,12 +506,12 @@ class RssParser } } - /** - * Triggered when closed tag is found - * - * @param $p - * @param $el Tag - */ + /** + * Triggered when closed tag is found + * + * @param $p + * @param $el Tag + */ function feed_end_element($p, $el) { $el = strtolower($el); @@ -517,12 +559,12 @@ class RssParser } - /** - * To concat 2 string with no warning if an operand is not defined - * - * @param $str1 - * @param $str2 - */ + /** + * To concat 2 string with no warning if an operand is not defined + * + * @param $str1 + * @param $str2 + */ function concat(&$str1, $str2="") { if (!isset($str1) ) { @@ -531,8 +573,8 @@ class RssParser $str1 .= $str2; } - /** - */ + /** + */ function append_content($text) { if ( $this->initem ) { @@ -543,9 +585,9 @@ class RssParser } } - /** - * smart append - field and namespace aware - */ + /** + * smart append - field and namespace aware + */ function append($el, $text) { if (!$el) { @@ -591,51 +633,51 @@ class RssParser */ function xml2php($xml) { - $fils = 0; - $tab = false; - $array = array(); - foreach($xml->children() as $key => $value) - { - $child = xml2php($value); + $fils = 0; + $tab = false; + $array = array(); + foreach($xml->children() as $key => $value) + { + $child = xml2php($value); - //To deal with the attributes - foreach($value->attributes() as $ak=>$av) - { - $child[$ak] = (string) $av; + //To deal with the attributes + foreach($value->attributes() as $ak=>$av) + { + $child[$ak] = (string) $av; - } + } - //Let see if the new child is not in the array - if($tab==false && in_array($key,array_keys($array))) - { - //If this element is already in the array we will create an indexed array - $tmp = $array[$key]; - $array[$key] = NULL; - $array[$key][] = $tmp; - $array[$key][] = $child; - $tab = true; - } - elseif($tab == true) - { - //Add an element in an existing array - $array[$key][] = $child; - } - else - { - //Add a simple element - $array[$key] = $child; - } + //Let see if the new child is not in the array + if($tab==false && in_array($key,array_keys($array))) + { + //If this element is already in the array we will create an indexed array + $tmp = $array[$key]; + $array[$key] = NULL; + $array[$key][] = $tmp; + $array[$key][] = $child; + $tab = true; + } + elseif($tab == true) + { + //Add an element in an existing array + $array[$key][] = $child; + } + else + { + //Add a simple element + $array[$key] = $child; + } - $fils++; - } + $fils++; + } - if($fils==0) - { - return (string) $xml; - } + if($fils==0) + { + return (string) $xml; + } - return $array; + return $array; }