wp/wp-includes/SimplePie/Locator.php
author ymh <ymh.work@gmail.com>
Tue, 15 Dec 2020 13:49:49 +0100
changeset 16 a86126ab1dd4
parent 0 d970ebf37754
child 18 be944660c56a
permissions -rw-r--r--
update enmi-conf
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * A PHP-Based RSS and Atom Feed Framework.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * Takes the hard work out of managing a complete RSS/Atom solution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     8
 * Copyright (c) 2004-2016, Ryan Parman, Sam Sneddon, Ryan McCue, and contributors
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * All rights reserved.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * Redistribution and use in source and binary forms, with or without modification, are
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * permitted provided that the following conditions are met:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * 	* Redistributions of source code must retain the above copyright notice, this list of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * 	  conditions and the following disclaimer.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * 	* Redistributions in binary form must reproduce the above copyright notice, this list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * 	  of conditions and the following disclaimer in the documentation and/or other materials
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * 	  provided with the distribution.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * 	* Neither the name of the SimplePie Team nor the names of its contributors may be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * 	  to endorse or promote products derived from this software without specific prior
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 * 	  written permission.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
 * POSSIBILITY OF SUCH DAMAGE.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
 * @package SimplePie
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    36
 * @copyright 2004-2016 Ryan Parman, Sam Sneddon, Ryan McCue
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 * @author Ryan Parman
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    38
 * @author Sam Sneddon
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @author Ryan McCue
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @link http://simplepie.org/ SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
 * Used for feed auto-discovery
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
 * This class can be overloaded with {@see SimplePie::set_locator_class()}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 * @package SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
class SimplePie_Locator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
	var $useragent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	var $timeout;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
	var $file;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
	var $local = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
	var $elsewhere = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	var $cached_entities = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	var $http_base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	var $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	var $base_location = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
	var $checked_feeds = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	var $max_checked_feeds = 10;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    65
	var $force_fsockopen = false;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    66
	var $curl_options = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
	protected $registry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    69
	public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10, $force_fsockopen = false, $curl_options = array())
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		$this->file = $file;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
		$this->useragent = $useragent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
		$this->timeout = $timeout;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		$this->max_checked_feeds = $max_checked_feeds;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    75
		$this->force_fsockopen = $force_fsockopen;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    76
		$this->curl_options = $curl_options;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		if (class_exists('DOMDocument'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
			$this->dom = new DOMDocument();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			set_error_handler(array('SimplePie_Misc', 'silence_errors'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			$this->dom->loadHTML($this->file->body);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
			restore_error_handler();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			$this->dom = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
	public function set_registry(SimplePie_Registry $registry)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
		$this->registry = $registry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
	public function find($type = SIMPLEPIE_LOCATOR_ALL, &$working)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
		if ($this->is_feed($this->file))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			return $this->file;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
		if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
			$sniffer = $this->registry->create('Content_Type_Sniffer', array($this->file));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
			if ($sniffer->get_type() !== 'text/html')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
				return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		if ($type & ~SIMPLEPIE_LOCATOR_NONE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
			$this->get_base();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			return $working[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
		if ($type & (SIMPLEPIE_LOCATOR_LOCAL_EXTENSION | SIMPLEPIE_LOCATOR_LOCAL_BODY | SIMPLEPIE_LOCATOR_REMOTE_EXTENSION | SIMPLEPIE_LOCATOR_REMOTE_BODY) && $this->get_links())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   127
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   132
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   137
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
			if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   142
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   148
	public function is_feed($file, $check_html = false)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
		if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			$sniffer = $this->registry->create('Content_Type_Sniffer', array($file));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
			$sniffed = $sniffer->get_type();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   154
			$mime_types = array('application/rss+xml', 'application/rdf+xml',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   155
			                    'text/rdf', 'application/atom+xml', 'text/xml',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   156
			                    'application/xml', 'application/x-rss+xml');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   157
			if ($check_html)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   159
				$mime_types[] = 'text/html';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   161
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   162
			return in_array($sniffed, $mime_types);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
		elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
	public function get_base()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		if ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		$this->http_base = $this->file->url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
		$this->base = $this->http_base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
		$elements = $this->dom->getElementsByTagName('base');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
		foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			if ($element->hasAttribute('href'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
				$base = $this->registry->call('Misc', 'absolutize_url', array(trim($element->getAttribute('href')), $this->http_base));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
				if ($base === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
				$this->base = $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
				$this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
	public function autodiscovery()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
		$done = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
		$feeds = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		$feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		$feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		$feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
		if (!empty($feeds))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			return array_values($feeds);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   211
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   212
		return null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
	protected function search_elements_by_tag($name, &$done, $feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
		if ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
		$links = $this->dom->getElementsByTagName($name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
		foreach ($links as $link)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
			if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   231
				$rel = array_unique($this->registry->call('Misc', 'space_separated_tokens', array(strtolower($link->getAttribute('rel')))));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
				$line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
				if ($this->base_location < $line)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
					$href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
					$href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
				if ($href === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   247
				if (!in_array($href, $done) && in_array('feed', $rel) || (in_array('alternate', $rel) && !in_array('stylesheet', $rel) && $link->hasAttribute('type') && in_array(strtolower($this->registry->call('Misc', 'parse_mime', array($link->getAttribute('type')))), array('text/html', 'application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href]))
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
					$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
					$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
						'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
					);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   253
					$feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   254
					if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed, true))
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
						$feeds[$href] = $feed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
				$done[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
		return $feeds;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
	public function get_links()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		if ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
		$links = $this->dom->getElementsByTagName('a');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
		foreach ($links as $link)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
			if ($link->hasAttribute('href'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
				$href = trim($link->getAttribute('href'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
				$parsed = $this->registry->call('Misc', 'parse_url', array($href));
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   280
				if ($parsed['scheme'] === '' || preg_match('/^(https?|feed)?$/i', $parsed['scheme']))
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
					if (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
						$href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->base));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
						$href = $this->registry->call('Misc', 'absolutize_url', array(trim($link->getAttribute('href')), $this->http_base));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
					if ($href === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
						continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
					$current = $this->registry->call('Misc', 'parse_url', array($this->file->url));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
					if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
						$this->local[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
						$this->elsewhere[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
		$this->local = array_unique($this->local);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		$this->elsewhere = array_unique($this->elsewhere);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
		if (!empty($this->local) || !empty($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   317
	public function get_rel_link($rel)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   318
	{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   319
		if ($this->dom === null)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   320
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   321
			throw new SimplePie_Exception('DOMDocument not found, unable to use '.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   322
			                              'locator');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   323
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   324
		if (!class_exists('DOMXpath'))
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   325
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   326
			throw new SimplePie_Exception('DOMXpath not found, unable to use '.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   327
			                              'get_rel_link');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   328
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   329
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   330
		$xpath = new DOMXpath($this->dom);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   331
		$query = '//a[@rel and @href] | //link[@rel and @href]';
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   332
		foreach ($xpath->query($query) as $link)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   333
		{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   334
			$href = trim($link->getAttribute('href'));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   335
			$parsed = $this->registry->call('Misc', 'parse_url', array($href));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   336
			if ($parsed['scheme'] === '' ||
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   337
			    preg_match('/^https?$/i', $parsed['scheme']))
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   338
			{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   339
				if (method_exists($link, 'getLineNo') &&
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   340
				    $this->base_location < $link->getLineNo())
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   341
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   342
					$href =
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   343
						$this->registry->call('Misc', 'absolutize_url',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   344
						                      array(trim($link->getAttribute('href')),
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   345
						                            $this->base));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   346
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   347
				else
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   348
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   349
					$href =
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   350
						$this->registry->call('Misc', 'absolutize_url',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   351
						                      array(trim($link->getAttribute('href')),
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   352
						                            $this->http_base));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   353
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   354
				if ($href === false)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   355
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   356
					return null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   357
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   358
				$rel_values = explode(' ', strtolower($link->getAttribute('rel')));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   359
				if (in_array($rel, $rel_values))
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   360
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   361
					return $href;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   362
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   363
			}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   364
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   365
		return null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   366
	}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   367
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
	public function extension(&$array)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
		foreach ($array as $key => $value)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
			if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
				$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
				$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
					'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
				);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   383
				$feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent, $this->force_fsockopen, $this->curl_options));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
				if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
				{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   386
					return array($feed);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
					unset($array[$key]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
	public function body(&$array)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
		foreach ($array as $key => $value)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   405
			if (preg_match('/(feed|rss|rdf|atom|xml)/i', $value))
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
				$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
				$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
					'Accept' => 'application/atom+xml, application/rss+xml, application/rdf+xml;q=0.9, application/xml;q=0.8, text/xml;q=0.8, text/html;q=0.7, unknown/unknown;q=0.1, application/unknown;q=0.1, */*;q=0.1',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
				);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   411
				$feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent, $this->force_fsockopen, $this->curl_options));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
				if ($feed->success && ($feed->method & SIMPLEPIE_FILE_SOURCE_REMOTE === 0 || ($feed->status_code === 200 || $feed->status_code > 206 && $feed->status_code < 300)) && $this->is_feed($feed))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
				{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   414
					return array($feed);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
					unset($array[$key]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
}