mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-60236 libraries: Upgrade simplepie to 1.5.0
This commit is contained in:
parent
22e99d61ca
commit
4f3b046cf9
13 changed files with 210 additions and 93 deletions
26
lib/simplepie/LICENSE.txt
Normal file
26
lib/simplepie/LICENSE.txt
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
Copyright (c) 2004-2007, Ryan Parman and Geoffrey Sneddon.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, are
|
||||||
|
permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list
|
||||||
|
of conditions and the following disclaimer in the documentation and/or other materials
|
||||||
|
provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the SimplePie Team nor the names of its contributors may be used
|
||||||
|
to endorse or promote products derived from this software without specific prior
|
||||||
|
written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
|
||||||
|
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
|
||||||
|
AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||||
|
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
|
@ -5,7 +5,7 @@
|
||||||
* A PHP-Based RSS and Atom Feed Framework.
|
* A PHP-Based RSS and Atom Feed Framework.
|
||||||
* Takes the hard work out of managing a complete RSS/Atom solution.
|
* Takes the hard work out of managing a complete RSS/Atom solution.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2004-2009, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
|
* Copyright (c) 2004-2016, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification, are
|
* Redistribution and use in source and binary forms, with or without modification, are
|
||||||
|
@ -33,8 +33,7 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @package SimplePie
|
* @package SimplePie
|
||||||
* @version 1.3.1
|
* @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue
|
||||||
* @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
|
|
||||||
* @author Ryan Parman
|
* @author Ryan Parman
|
||||||
* @author Geoffrey Sneddon
|
* @author Geoffrey Sneddon
|
||||||
* @author Ryan McCue
|
* @author Ryan McCue
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* A PHP-Based RSS and Atom Feed Framework.
|
* A PHP-Based RSS and Atom Feed Framework.
|
||||||
* Takes the hard work out of managing a complete RSS/Atom solution.
|
* Takes the hard work out of managing a complete RSS/Atom solution.
|
||||||
*
|
*
|
||||||
* Copyright (c) 2004-2016, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
|
* Copyright (c) 2004-2017, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without modification, are
|
* Redistribution and use in source and binary forms, with or without modification, are
|
||||||
|
@ -33,8 +33,8 @@
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* @package SimplePie
|
* @package SimplePie
|
||||||
* @version 1.4.1
|
* @version 1.5
|
||||||
* @copyright 2004-2016 Ryan Parman, Geoffrey Sneddon, Ryan McCue
|
* @copyright 2004-2017 Ryan Parman, Geoffrey Sneddon, Ryan McCue
|
||||||
* @author Ryan Parman
|
* @author Ryan Parman
|
||||||
* @author Geoffrey Sneddon
|
* @author Geoffrey Sneddon
|
||||||
* @author Ryan McCue
|
* @author Ryan McCue
|
||||||
|
@ -50,7 +50,7 @@ define('SIMPLEPIE_NAME', 'SimplePie');
|
||||||
/**
|
/**
|
||||||
* SimplePie Version
|
* SimplePie Version
|
||||||
*/
|
*/
|
||||||
define('SIMPLEPIE_VERSION', '1.4.1');
|
define('SIMPLEPIE_VERSION', '1.5');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SimplePie Build
|
* SimplePie Build
|
||||||
|
@ -643,6 +643,12 @@ class SimplePie
|
||||||
*/
|
*/
|
||||||
public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
|
public $strip_htmltags = array('base', 'blink', 'body', 'doctype', 'embed', 'font', 'form', 'frame', 'frameset', 'html', 'iframe', 'input', 'marquee', 'meta', 'noscript', 'object', 'param', 'script', 'style');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var bool Should we throw exceptions, or use the old-style error property?
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
public $enable_exceptions = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The SimplePie class contains feed level data and options
|
* The SimplePie class contains feed level data and options
|
||||||
*
|
*
|
||||||
|
@ -659,9 +665,9 @@ class SimplePie
|
||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
if (version_compare(PHP_VERSION, '5.2', '<'))
|
if (version_compare(PHP_VERSION, '5.3', '<'))
|
||||||
{
|
{
|
||||||
trigger_error('PHP 4.x, 5.0 and 5.1 are no longer supported. Please upgrade to PHP 5.2 or newer.');
|
trigger_error('Please upgrade to PHP 5.3 or newer.');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1294,6 +1300,7 @@ class SimplePie
|
||||||
// Check absolute bare minimum requirements.
|
// Check absolute bare minimum requirements.
|
||||||
if (!extension_loaded('xml') || !extension_loaded('pcre'))
|
if (!extension_loaded('xml') || !extension_loaded('pcre'))
|
||||||
{
|
{
|
||||||
|
$this->error = 'XML or PCRE extensions not loaded!';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
|
// Then check the xml extension is sane (i.e., libxml 2.7.x issue on PHP < 5.2.9 and libxml 2.7.0 to 2.7.2 on any version) if we don't have xmlreader.
|
||||||
|
@ -1375,6 +1382,13 @@ class SimplePie
|
||||||
|
|
||||||
list($headers, $sniffed) = $fetched;
|
list($headers, $sniffed) = $fetched;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Empty response check
|
||||||
|
if(empty($this->raw_data)){
|
||||||
|
$this->error = "A feed could not be found at `$this->feed_url`. Empty body.";
|
||||||
|
$this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Set up array of possible encodings
|
// Set up array of possible encodings
|
||||||
$encodings = array();
|
$encodings = array();
|
||||||
|
@ -1438,7 +1452,7 @@ class SimplePie
|
||||||
$this->data = $parser->get_data();
|
$this->data = $parser->get_data();
|
||||||
if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE))
|
if (!($this->get_type() & ~SIMPLEPIE_TYPE_NONE))
|
||||||
{
|
{
|
||||||
$this->error = "A feed could not be found at $this->feed_url. This does not appear to be a valid RSS or Atom feed.";
|
$this->error = "A feed could not be found at `$this->feed_url`. This does not appear to be a valid RSS or Atom feed.";
|
||||||
$this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
|
$this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1467,7 +1481,22 @@ class SimplePie
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$this->error = 'The data could not be converted to UTF-8. You MUST have either the iconv or mbstring extension installed. Upgrading to PHP 5.x (which includes iconv) is highly recommended.';
|
$this->error = 'The data could not be converted to UTF-8.';
|
||||||
|
if (!extension_loaded('mbstring') && !extension_loaded('iconv') && !class_exists('\UConverter')) {
|
||||||
|
$this->error .= ' You MUST have either the iconv, mbstring or intl (PHP 5.5+) extension installed and enabled.';
|
||||||
|
} else {
|
||||||
|
$missingExtensions = array();
|
||||||
|
if (!extension_loaded('iconv')) {
|
||||||
|
$missingExtensions[] = 'iconv';
|
||||||
|
}
|
||||||
|
if (!extension_loaded('mbstring')) {
|
||||||
|
$missingExtensions[] = 'mbstring';
|
||||||
|
}
|
||||||
|
if (!class_exists('\UConverter')) {
|
||||||
|
$missingExtensions[] = 'intl (PHP 5.5+)';
|
||||||
|
}
|
||||||
|
$this->error .= ' Try installing/enabling the ' . implode(' or ', $missingExtensions) . ' extension.';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
|
$this->registry->call('Misc', 'error', array($this->error, E_USER_NOTICE, __FILE__, __LINE__));
|
||||||
|
|
|
@ -56,7 +56,7 @@ class SimplePie_Category
|
||||||
/**
|
/**
|
||||||
* Category identifier
|
* Category identifier
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string|null
|
||||||
* @see get_term
|
* @see get_term
|
||||||
*/
|
*/
|
||||||
var $term;
|
var $term;
|
||||||
|
@ -64,7 +64,7 @@ class SimplePie_Category
|
||||||
/**
|
/**
|
||||||
* Categorization scheme identifier
|
* Categorization scheme identifier
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string|null
|
||||||
* @see get_scheme()
|
* @see get_scheme()
|
||||||
*/
|
*/
|
||||||
var $scheme;
|
var $scheme;
|
||||||
|
@ -72,23 +72,36 @@ class SimplePie_Category
|
||||||
/**
|
/**
|
||||||
* Human readable label
|
* Human readable label
|
||||||
*
|
*
|
||||||
* @var string
|
* @var string|null
|
||||||
* @see get_label()
|
* @see get_label()
|
||||||
*/
|
*/
|
||||||
var $label;
|
var $label;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Category type
|
||||||
|
*
|
||||||
|
* category for <category>
|
||||||
|
* subject for <dc:subject>
|
||||||
|
*
|
||||||
|
* @var string|null
|
||||||
|
* @see get_type()
|
||||||
|
*/
|
||||||
|
var $type;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor, used to input the data
|
* Constructor, used to input the data
|
||||||
*
|
*
|
||||||
* @param string $term
|
* @param string|null $term
|
||||||
* @param string $scheme
|
* @param string|null $scheme
|
||||||
* @param string $label
|
* @param string|null $label
|
||||||
|
* @param string|null $type
|
||||||
*/
|
*/
|
||||||
public function __construct($term = null, $scheme = null, $label = null)
|
public function __construct($term = null, $scheme = null, $label = null, $type = null)
|
||||||
{
|
{
|
||||||
$this->term = $term;
|
$this->term = $term;
|
||||||
$this->scheme = $scheme;
|
$this->scheme = $scheme;
|
||||||
$this->label = $label;
|
$this->label = $label;
|
||||||
|
$this->type = $type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -109,14 +122,7 @@ class SimplePie_Category
|
||||||
*/
|
*/
|
||||||
public function get_term()
|
public function get_term()
|
||||||
{
|
{
|
||||||
if ($this->term !== null)
|
return $this->term;
|
||||||
{
|
|
||||||
return $this->term;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -126,31 +132,32 @@ class SimplePie_Category
|
||||||
*/
|
*/
|
||||||
public function get_scheme()
|
public function get_scheme()
|
||||||
{
|
{
|
||||||
if ($this->scheme !== null)
|
return $this->scheme;
|
||||||
{
|
|
||||||
return $this->scheme;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the human readable label
|
* Get the human readable label
|
||||||
*
|
*
|
||||||
|
* @param bool $strict
|
||||||
* @return string|null
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public function get_label()
|
public function get_label($strict = false)
|
||||||
{
|
{
|
||||||
if ($this->label !== null)
|
if ($this->label === null && $strict !== true)
|
||||||
{
|
|
||||||
return $this->label;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
return $this->get_term();
|
return $this->get_term();
|
||||||
}
|
}
|
||||||
|
return $this->label;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the category type
|
||||||
|
*
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function get_type()
|
||||||
|
{
|
||||||
|
return $this->type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -255,7 +255,7 @@ class SimplePie_Content_Type_Sniffer
|
||||||
public function feed_or_html()
|
public function feed_or_html()
|
||||||
{
|
{
|
||||||
$len = strlen($this->file->body);
|
$len = strlen($this->file->body);
|
||||||
$pos = strspn($this->file->body, "\x09\x0A\x0D\x20");
|
$pos = strspn($this->file->body, "\x09\x0A\x0D\x20\xEF\xBB\xBF");
|
||||||
|
|
||||||
while ($pos < $len)
|
while ($pos < $len)
|
||||||
{
|
{
|
||||||
|
|
|
@ -227,7 +227,7 @@ class SimplePie_File
|
||||||
if ($parser->parse())
|
if ($parser->parse())
|
||||||
{
|
{
|
||||||
$this->headers = $parser->headers;
|
$this->headers = $parser->headers;
|
||||||
$this->body = trim($parser->body);
|
$this->body = $parser->body;
|
||||||
$this->status_code = $parser->status_code;
|
$this->status_code = $parser->status_code;
|
||||||
if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
|
if ((in_array($this->status_code, array(300, 301, 302, 303, 307)) || $this->status_code > 307 && $this->status_code < 400) && isset($this->headers['location']) && $this->redirects < $redirects)
|
||||||
{
|
{
|
||||||
|
|
|
@ -206,9 +206,10 @@ class SimplePie_Item
|
||||||
*
|
*
|
||||||
* @since Beta 2
|
* @since Beta 2
|
||||||
* @param boolean $hash Should we force using a hash instead of the supplied ID?
|
* @param boolean $hash Should we force using a hash instead of the supplied ID?
|
||||||
* @return string
|
* @param string|false $fn User-supplied function to generate an hash
|
||||||
|
* @return string|null
|
||||||
*/
|
*/
|
||||||
public function get_id($hash = false, $fn = '')
|
public function get_id($hash = false, $fn = 'md5')
|
||||||
{
|
{
|
||||||
if (!$hash)
|
if (!$hash)
|
||||||
{
|
{
|
||||||
|
@ -237,7 +238,15 @@ class SimplePie_Item
|
||||||
return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
|
return $this->sanitize($this->data['attribs'][SIMPLEPIE_NAMESPACE_RDF]['about'], SIMPLEPIE_CONSTRUCT_TEXT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($fn === '' || !is_callable($fn)) $fn = 'md5';
|
if ($fn === false)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
elseif (!is_callable($fn))
|
||||||
|
{
|
||||||
|
trigger_error('User-supplied function $fn must be callable', E_USER_WARNING);
|
||||||
|
$fn = 'md5';
|
||||||
|
}
|
||||||
return call_user_func($fn,
|
return call_user_func($fn,
|
||||||
$this->get_permalink().$this->get_title().$this->get_content());
|
$this->get_permalink().$this->get_title().$this->get_content());
|
||||||
}
|
}
|
||||||
|
@ -307,41 +316,50 @@ class SimplePie_Item
|
||||||
*/
|
*/
|
||||||
public function get_description($description_only = false)
|
public function get_description($description_only = false)
|
||||||
{
|
{
|
||||||
if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary'))
|
if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'summary')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'summary')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10, 'description')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_MAYBE_HTML, $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'description')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'description')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'description')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'summary')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ITUNES, 'subtitle')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT)))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_TEXT);
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_090, 'description')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML)))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML);
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
elseif (!$description_only)
|
elseif (!$description_only)
|
||||||
|
@ -370,17 +388,20 @@ class SimplePie_Item
|
||||||
*/
|
*/
|
||||||
public function get_content($content_only = false)
|
public function get_content($content_only = false)
|
||||||
{
|
{
|
||||||
if ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content'))
|
if (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'content')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_10_content_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_03, 'content')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($tags[0]['attribs'])), $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], $this->registry->call('Misc', 'atom_03_construct_type', array($return[0]['attribs'])), $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif ($return = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded'))
|
elseif (($tags = $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_10_MODULES_CONTENT, 'encoded')) &&
|
||||||
|
($return = $this->sanitize($tags[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($tags[0]))))
|
||||||
{
|
{
|
||||||
return $this->sanitize($return[0]['data'], SIMPLEPIE_CONSTRUCT_HTML, $this->get_base($return[0]));
|
return $return;
|
||||||
}
|
}
|
||||||
elseif (!$content_only)
|
elseif (!$content_only)
|
||||||
{
|
{
|
||||||
|
@ -448,7 +469,8 @@ class SimplePie_Item
|
||||||
{
|
{
|
||||||
$categories = array();
|
$categories = array();
|
||||||
|
|
||||||
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, 'category') as $category)
|
$type = 'category';
|
||||||
|
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_ATOM_10, $type) as $category)
|
||||||
{
|
{
|
||||||
$term = null;
|
$term = null;
|
||||||
$scheme = null;
|
$scheme = null;
|
||||||
|
@ -465,9 +487,9 @@ class SimplePie_Item
|
||||||
{
|
{
|
||||||
$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_HTML);
|
$label = $this->sanitize($category['attribs']['']['label'], SIMPLEPIE_CONSTRUCT_HTML);
|
||||||
}
|
}
|
||||||
$categories[] = $this->registry->create('Category', array($term, $scheme, $label));
|
$categories[] = $this->registry->create('Category', array($term, $scheme, $label, $type));
|
||||||
}
|
}
|
||||||
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, 'category') as $category)
|
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_RSS_20, $type) as $category)
|
||||||
{
|
{
|
||||||
// This is really the label, but keep this as the term also for BC.
|
// This is really the label, but keep this as the term also for BC.
|
||||||
// Label will also work on retrieving because that falls back to term.
|
// Label will also work on retrieving because that falls back to term.
|
||||||
|
@ -480,15 +502,17 @@ class SimplePie_Item
|
||||||
{
|
{
|
||||||
$scheme = null;
|
$scheme = null;
|
||||||
}
|
}
|
||||||
$categories[] = $this->registry->create('Category', array($term, $scheme, null));
|
$categories[] = $this->registry->create('Category', array($term, $scheme, null, $type));
|
||||||
}
|
}
|
||||||
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, 'subject') as $category)
|
|
||||||
|
$type = 'subject';
|
||||||
|
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_11, $type) as $category)
|
||||||
{
|
{
|
||||||
$categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null));
|
$categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type));
|
||||||
}
|
}
|
||||||
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, 'subject') as $category)
|
foreach ((array) $this->get_item_tags(SIMPLEPIE_NAMESPACE_DC_10, $type) as $category)
|
||||||
{
|
{
|
||||||
$categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null));
|
$categories[] = $this->registry->create('Category', array($this->sanitize($category['data'], SIMPLEPIE_CONSTRUCT_HTML), null, null, $type));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($categories))
|
if (!empty($categories))
|
||||||
|
@ -2802,9 +2826,17 @@ class SimplePie_Item
|
||||||
{
|
{
|
||||||
$length = ceil($link['attribs']['']['length']);
|
$length = ceil($link['attribs']['']['length']);
|
||||||
}
|
}
|
||||||
|
if (isset($link['attribs']['']['title']))
|
||||||
|
{
|
||||||
|
$title = $this->sanitize($link['attribs']['']['title'], SIMPLEPIE_CONSTRUCT_TEXT);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$title = $title_parent;
|
||||||
|
}
|
||||||
|
|
||||||
// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
|
// Since we don't have group or content for these, we'll just pass the '*_parent' variables directly to the constructor
|
||||||
$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title_parent, $width));
|
$this->data['enclosures'][] = $this->registry->create('Enclosure', array($url, $type, $length, null, $bitrate, $captions_parent, $categories_parent, $channels, $copyrights_parent, $credits_parent, $description_parent, $duration_parent, $expression, $framerate, $hashes_parent, $height, $keywords_parent, $lang, $medium, $player_parent, $ratings_parent, $restrictions_parent, $samplingrate, $thumbnails_parent, $title, $width));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -232,7 +232,7 @@ class SimplePie_Locator
|
||||||
}
|
}
|
||||||
if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
|
if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
|
||||||
{
|
{
|
||||||
$rel = array_unique($this->registry->call('Misc', 'space_seperated_tokens', array(strtolower($link->getAttribute('rel')))));
|
$rel = array_unique($this->registry->call('Misc', 'space_separated_tokens', array(strtolower($link->getAttribute('rel')))));
|
||||||
$line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
|
$line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
|
||||||
|
|
||||||
if ($this->base_location < $line)
|
if ($this->base_location < $line)
|
||||||
|
|
|
@ -333,11 +333,16 @@ class SimplePie_Misc
|
||||||
{
|
{
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
// This is last, as behaviour of this varies with OS userland and PHP version
|
// This is third, as behaviour of this varies with OS userland and PHP version
|
||||||
elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output)))
|
elseif (function_exists('iconv') && ($return = SimplePie_Misc::change_encoding_iconv($data, $input, $output)))
|
||||||
{
|
{
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
// This is last, as behaviour of this varies with OS userland and PHP version
|
||||||
|
elseif (class_exists('\UConverter') && ($return = SimplePie_Misc::change_encoding_uconverter($data, $input, $output)))
|
||||||
|
{
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
// If we can't do anything, just fail
|
// If we can't do anything, just fail
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -388,6 +393,17 @@ class SimplePie_Misc
|
||||||
return @iconv($input, $output, $data);
|
return @iconv($input, $output, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string $data
|
||||||
|
* @param string $input
|
||||||
|
* @param string $output
|
||||||
|
* @return string|false
|
||||||
|
*/
|
||||||
|
protected static function change_encoding_uconverter($data, $input, $output)
|
||||||
|
{
|
||||||
|
return @\UConverter::transcode($data, $output, $input);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalize an encoding name
|
* Normalize an encoding name
|
||||||
*
|
*
|
||||||
|
@ -1942,7 +1958,7 @@ class SimplePie_Misc
|
||||||
return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
|
return (bool) preg_match('/^([A-Za-z0-9\-._~\x{A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}\x{10000}-\x{1FFFD}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}\x{40000}-\x{4FFFD}\x{50000}-\x{5FFFD}\x{60000}-\x{6FFFD}\x{70000}-\x{7FFFD}\x{80000}-\x{8FFFD}\x{90000}-\x{9FFFD}\x{A0000}-\x{AFFFD}\x{B0000}-\x{BFFFD}\x{C0000}-\x{CFFFD}\x{D0000}-\x{DFFFD}\x{E1000}-\x{EFFFD}!$&\'()*+,;=@]|(%[0-9ABCDEF]{2}))+$/u', $string);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function space_seperated_tokens($string)
|
public static function space_separated_tokens($string)
|
||||||
{
|
{
|
||||||
$space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
|
$space_characters = "\x20\x09\x0A\x0B\x0C\x0D";
|
||||||
$string_length = strlen($string);
|
$string_length = strlen($string);
|
||||||
|
|
|
@ -630,7 +630,7 @@ class SimplePie_Parse_Date
|
||||||
/**
|
/**
|
||||||
* Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
|
* Parse a superset of W3C-DTF (allows hyphens and colons to be omitted, as
|
||||||
* well as allowing any of upper or lower case "T", horizontal tabs, or
|
* well as allowing any of upper or lower case "T", horizontal tabs, or
|
||||||
* spaces to be used as the time seperator (including more than one))
|
* spaces to be used as the time separator (including more than one))
|
||||||
*
|
*
|
||||||
* @access protected
|
* @access protected
|
||||||
* @return int Timestamp
|
* @return int Timestamp
|
||||||
|
@ -690,7 +690,7 @@ class SimplePie_Parse_Date
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert the number of seconds to an integer, taking decimals into account
|
// Convert the number of seconds to an integer, taking decimals into account
|
||||||
$second = round($match[6] + $match[7] / pow(10, strlen($match[7])));
|
$second = round((int)$match[6] + (int)$match[7] / pow(10, strlen($match[7])));
|
||||||
|
|
||||||
return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
|
return gmmktime($match[4], $match[5], $second, $match[2], $match[3], $match[1]) - $timezone;
|
||||||
}
|
}
|
||||||
|
|
|
@ -273,10 +273,6 @@ class SimplePie_Sanitize
|
||||||
$document = new DOMDocument();
|
$document = new DOMDocument();
|
||||||
$document->encoding = 'UTF-8';
|
$document->encoding = 'UTF-8';
|
||||||
|
|
||||||
// See https://github.com/simplepie/simplepie/issues/334
|
|
||||||
$unique_tag = '#'.uniqid().'#';
|
|
||||||
$data = trim($unique_tag . $data . $unique_tag);
|
|
||||||
|
|
||||||
$data = $this->preprocess($data, $type);
|
$data = $this->preprocess($data, $type);
|
||||||
|
|
||||||
set_error_handler(array('SimplePie_Misc', 'silence_errors'));
|
set_error_handler(array('SimplePie_Misc', 'silence_errors'));
|
||||||
|
@ -366,11 +362,17 @@ class SimplePie_Sanitize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get content node
|
||||||
|
$div = $document->getElementsByTagName('body')->item(0)->firstChild;
|
||||||
// Finally, convert to a HTML string
|
// Finally, convert to a HTML string
|
||||||
$data = trim($document->saveHTML());
|
if (version_compare(PHP_VERSION, '5.3.6', '>='))
|
||||||
$result = explode($unique_tag, $data);
|
{
|
||||||
// The tags may not be found again if there was invalid markup.
|
$data = trim($document->saveHTML($div));
|
||||||
$data = count($result) === 3 ? $result[1] : '';
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$data = trim($document->saveXML($div));
|
||||||
|
}
|
||||||
|
|
||||||
if ($this->remove_div)
|
if ($this->remove_div)
|
||||||
{
|
{
|
||||||
|
|
|
@ -15,4 +15,10 @@ Updated to version 1.4.2 (MDL-56001)
|
||||||
The actual code has not been updated and still reads 1.4.1, but this is tagged as 1.4.2 on the site.
|
The actual code has not been updated and still reads 1.4.1, but this is tagged as 1.4.2 on the site.
|
||||||
My guess is that they forgot to update the numbers when tagging the new version number. An issue has
|
My guess is that they forgot to update the numbers when tagging the new version number. An issue has
|
||||||
been created on their github account (https://github.com/simplepie/simplepie/issues/472).
|
been created on their github account (https://github.com/simplepie/simplepie/issues/472).
|
||||||
By Adrian Greeve <adrian@moodle.com>
|
By Adrian Greeve <adrian@moodle.com>
|
||||||
|
|
||||||
|
|
||||||
|
2017/09/28
|
||||||
|
==========
|
||||||
|
Updated to version 1.5.0 (MDL-60236)
|
||||||
|
By Ankit Agarwal <ankit.agrr@gmail.com>
|
|
@ -123,7 +123,7 @@
|
||||||
<location>simplepie</location>
|
<location>simplepie</location>
|
||||||
<name>SimplePie</name>
|
<name>SimplePie</name>
|
||||||
<license>BSD</license>
|
<license>BSD</license>
|
||||||
<version>1.4.2</version>
|
<version>1.5.0</version>
|
||||||
<licenseversion></licenseversion>
|
<licenseversion></licenseversion>
|
||||||
</library>
|
</library>
|
||||||
<library>
|
<library>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue