wp/wp-includes/SimplePie/Locator.php
author ymh <ymh.work@gmail.com>
Tue, 27 Sep 2022 16:37:53 +0200
changeset 19 3d72ae0968f4
parent 18 be944660c56a
permissions -rw-r--r--
upgrade wordpress to 6.0.2
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();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    67
	var $dom;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	protected $registry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    70
	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
    71
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
		$this->file = $file;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
		$this->useragent = $useragent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		$this->timeout = $timeout;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
		$this->max_checked_feeds = $max_checked_feeds;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    76
		$this->force_fsockopen = $force_fsockopen;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    77
		$this->curl_options = $curl_options;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    79
		if (class_exists('DOMDocument') && $this->file->body != '')
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			$this->dom = new DOMDocument();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			set_error_handler(array('SimplePie_Misc', 'silence_errors'));
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    84
			try
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    85
			{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    86
				$this->dom->loadHTML($this->file->body);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    87
			}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    88
			catch (Throwable $ex)
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    89
			{
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    90
				$this->dom = null;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
    91
			}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
			restore_error_handler();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
			$this->dom = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
	public function set_registry(SimplePie_Registry $registry)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		$this->registry = $registry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   105
	public function find($type = SIMPLEPIE_LOCATOR_ALL, &$working = null)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		if ($this->is_feed($this->file))
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 $this->file;
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
		if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
			$sniffer = $this->registry->create('Content_Type_Sniffer', array($this->file));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
			if ($sniffer->get_type() !== 'text/html')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
				return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		if ($type & ~SIMPLEPIE_LOCATOR_NONE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
			$this->get_base();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			return $working[0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
		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
   132
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
			if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   135
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   140
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
			if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   145
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
			if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   150
				return $working[0];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   156
	public function is_feed($file, $check_html = false)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
		if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
			$sniffer = $this->registry->create('Content_Type_Sniffer', array($file));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
			$sniffed = $sniffer->get_type();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   162
			$mime_types = array('application/rss+xml', 'application/rdf+xml',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   163
			                    'text/rdf', 'application/atom+xml', 'text/xml',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   164
			                    'application/xml', 'application/x-rss+xml');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   165
			if ($check_html)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   167
				$mime_types[] = 'text/html';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   169
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   170
			return in_array($sniffed, $mime_types);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
		elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
	public function get_base()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		if ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
		$this->http_base = $this->file->url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		$this->base = $this->http_base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
		$elements = $this->dom->getElementsByTagName('base');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
			if ($element->hasAttribute('href'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
				$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
   196
				if ($base === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
				$this->base = $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
				$this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
	public function autodiscovery()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
		$done = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		$feeds = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		$feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		$feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
		$feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
		if (!empty($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
			return array_values($feeds);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
		}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   219
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   220
		return null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
	protected function search_elements_by_tag($name, &$done, $feeds)
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->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
		$links = $this->dom->getElementsByTagName($name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
		foreach ($links as $link)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
			if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
			{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   239
				$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
   240
				$line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
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 ($this->base_location < $line)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
					$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
   245
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
					$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
   249
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
				if ($href === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   255
				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
   256
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
					$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
					$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
						'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
   260
					);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   261
					$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
   262
					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
   263
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
						$feeds[$href] = $feed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
				$done[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		return $feeds;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
	public function get_links()
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 ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
		$links = $this->dom->getElementsByTagName('a');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
		foreach ($links as $link)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
			if ($link->hasAttribute('href'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
				$href = trim($link->getAttribute('href'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
				$parsed = $this->registry->call('Misc', 'parse_url', array($href));
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   288
				if ($parsed['scheme'] === '' || preg_match('/^(https?|feed)?$/i', $parsed['scheme']))
0
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 (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
						$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
   293
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
						$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
   297
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					if ($href === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
						continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
					$current = $this->registry->call('Misc', 'parse_url', array($this->file->url));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
					if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
						$this->local[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
						$this->elsewhere[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
		$this->local = array_unique($this->local);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
		$this->elsewhere = array_unique($this->elsewhere);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		if (!empty($this->local) || !empty($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   325
	public function get_rel_link($rel)
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   326
	{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   327
		if ($this->dom === null)
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
			throw new SimplePie_Exception('DOMDocument not found, unable to use '.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   330
			                              'locator');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   331
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   332
		if (!class_exists('DOMXpath'))
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
			throw new SimplePie_Exception('DOMXpath not found, unable to use '.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   335
			                              'get_rel_link');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   336
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   337
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   338
		$xpath = new DOMXpath($this->dom);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   339
		$query = '//a[@rel and @href] | //link[@rel and @href]';
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   340
		foreach ($xpath->query($query) as $link)
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 = trim($link->getAttribute('href'));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   343
			$parsed = $this->registry->call('Misc', 'parse_url', array($href));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   344
			if ($parsed['scheme'] === '' ||
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   345
			    preg_match('/^https?$/i', $parsed['scheme']))
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
				if (method_exists($link, 'getLineNo') &&
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   348
				    $this->base_location < $link->getLineNo())
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   349
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   350
					$href =
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   351
						$this->registry->call('Misc', 'absolutize_url',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   352
						                      array(trim($link->getAttribute('href')),
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   353
						                            $this->base));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   354
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   355
				else
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   356
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   357
					$href =
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   358
						$this->registry->call('Misc', 'absolutize_url',
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   359
						                      array(trim($link->getAttribute('href')),
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   360
						                            $this->http_base));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   361
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   362
				if ($href === false)
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
					return null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   365
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   366
				$rel_values = explode(' ', strtolower($link->getAttribute('rel')));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   367
				if (in_array($rel, $rel_values))
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   368
				{
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   369
					return $href;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   370
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   371
			}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   372
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   373
		return null;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   374
	}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   375
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
	public function extension(&$array)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
		foreach ($array as $key => $value)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
			if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
				$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
				$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
					'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
   390
				);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   391
				$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
   392
				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
   393
				{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   394
					return array($feed);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
					unset($array[$key]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
	public function body(&$array)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
		foreach ($array as $key => $value)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			}
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   413
			if (preg_match('/(feed|rss|rdf|atom|xml)/i', $value))
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
				$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
				$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
					'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
   418
				);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   419
				$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
   420
				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
   421
				{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   422
					return array($feed);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
					unset($array[$key]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
}