wp/wp-includes/SimplePie/Locator.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 16 a86126ab1dd4
permissions -rw-r--r--
first import
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
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 * @version 1.3.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
 * @author Ryan Parman
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
 * @author Geoffrey Sneddon
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
 * @author Ryan McCue
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
 * @link http://simplepie.org/ SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
 * @license http://www.opensource.org/licenses/bsd-license.php BSD License
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
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
 * Used for feed auto-discovery
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
 * This class can be overloaded with {@see SimplePie::set_locator_class()}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
 * @package SimplePie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
class SimplePie_Locator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
	var $useragent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
	var $timeout;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
	var $file;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
	var $local = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
	var $elsewhere = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
	var $cached_entities = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
	var $http_base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
	var $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
	var $base_location = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
	var $checked_feeds = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
	var $max_checked_feeds = 10;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
	protected $registry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
	public function __construct(SimplePie_File $file, $timeout = 10, $useragent = null, $max_checked_feeds = 10)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		$this->file = $file;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		$this->useragent = $useragent;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
		$this->timeout = $timeout;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
		$this->max_checked_feeds = $max_checked_feeds;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
		if (class_exists('DOMDocument'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			$this->dom = new DOMDocument();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
			set_error_handler(array('SimplePie_Misc', 'silence_errors'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
			$this->dom->loadHTML($this->file->body);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			restore_error_handler();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			$this->dom = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
	public function set_registry(SimplePie_Registry $registry)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
		$this->registry = $registry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
	public function find($type = SIMPLEPIE_LOCATOR_ALL, &$working)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
		if ($this->is_feed($this->file))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
			return $this->file;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
		if ($this->file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
			$sniffer = $this->registry->create('Content_Type_Sniffer', array($this->file));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
			if ($sniffer->get_type() !== 'text/html')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
				return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		if ($type & ~SIMPLEPIE_LOCATOR_NONE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
			$this->get_base();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		if ($type & SIMPLEPIE_LOCATOR_AUTODISCOVERY && $working = $this->autodiscovery())
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 $working[0];
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
		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
   121
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			if ($type & SIMPLEPIE_LOCATOR_LOCAL_EXTENSION && $working = $this->extension($this->local))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
				return $working;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			if ($type & SIMPLEPIE_LOCATOR_LOCAL_BODY && $working = $this->body($this->local))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
				return $working;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
			if ($type & SIMPLEPIE_LOCATOR_REMOTE_EXTENSION && $working = $this->extension($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
				return $working;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			if ($type & SIMPLEPIE_LOCATOR_REMOTE_BODY && $working = $this->body($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
				return $working;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
		return null;
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
	public function is_feed($file)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
		if ($file->method & SIMPLEPIE_FILE_SOURCE_REMOTE)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			$sniffer = $this->registry->create('Content_Type_Sniffer', array($file));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
			$sniffed = $sniffer->get_type();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			if (in_array($sniffed, array('application/rss+xml', 'application/rdf+xml', 'text/rdf', 'application/atom+xml', 'text/xml', 'application/xml')))
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 true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
		elseif ($file->method & SIMPLEPIE_FILE_SOURCE_LOCAL)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
		else
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 false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
	public function get_base()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
		if ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
		$this->http_base = $this->file->url;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
		$this->base = $this->http_base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
		$elements = $this->dom->getElementsByTagName('base');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		foreach ($elements as $element)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
			if ($element->hasAttribute('href'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
				$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
   184
				if ($base === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
					continue;
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->base = $base;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
				$this->base_location = method_exists($element, 'getLineNo') ? $element->getLineNo() : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
	public function autodiscovery()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
		$done = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		$feeds = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
		$feeds = array_merge($feeds, $this->search_elements_by_tag('link', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
		$feeds = array_merge($feeds, $this->search_elements_by_tag('a', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
		$feeds = array_merge($feeds, $this->search_elements_by_tag('area', $done, $feeds));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		if (!empty($feeds))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
			return array_values($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
		else
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 null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
	protected function search_elements_by_tag($name, &$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 ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		$links = $this->dom->getElementsByTagName($name);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		foreach ($links as $link)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			if ($this->checked_feeds === $this->max_checked_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
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			if ($link->hasAttribute('href') && $link->hasAttribute('rel'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
				$rel = array_unique($this->registry->call('Misc', 'space_seperated_tokens', array(strtolower($link->getAttribute('rel')))));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
				$line = method_exists($link, 'getLineNo') ? $link->getLineNo() : 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
				if ($this->base_location < $line)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
					$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
   235
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
					$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
   239
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
				if ($href === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
					continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
				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('application/rss+xml', 'application/atom+xml'))) && !isset($feeds[$href]))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
					$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
					$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
						'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
   250
					);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
					$feed = $this->registry->create('File', array($href, $this->timeout, 5, $headers, $this->useragent));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
					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
   253
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
						$feeds[$href] = $feed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
				$done[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
		return $feeds;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
	public function get_links()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		if ($this->dom === null)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
			throw new SimplePie_Exception('DOMDocument not found, unable to use locator');
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
		$links = $this->dom->getElementsByTagName('a');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
		foreach ($links as $link)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			if ($link->hasAttribute('href'))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
				$href = trim($link->getAttribute('href'));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
				$parsed = $this->registry->call('Misc', 'parse_url', array($href));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
				if ($parsed['scheme'] === '' || preg_match('/^(http(s)|feed)?$/i', $parsed['scheme']))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
					if (method_exists($link, 'getLineNo') && $this->base_location < $link->getLineNo())
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
						$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
   283
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
					else
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 = $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
   287
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
					if ($href === false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
						continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
					$current = $this->registry->call('Misc', 'parse_url', array($this->file->url));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
					if ($parsed['authority'] === '' || $parsed['authority'] === $current['authority'])
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
						$this->local[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
					else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
					{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
						$this->elsewhere[] = $href;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
				}
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
		$this->local = array_unique($this->local);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
		$this->elsewhere = array_unique($this->elsewhere);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
		if (!empty($this->local) || !empty($this->elsewhere))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
			return true;
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 null;
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
	public function extension(&$array)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
		foreach ($array as $key => $value)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
			if (in_array(strtolower(strrchr($value, '.')), array('.rss', '.rdf', '.atom', '.xml')))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
				$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
				$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
					'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
   329
				);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
				$feed = $this->registry->create('File', array($value, $this->timeout, 5, $headers, $this->useragent));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
				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
   332
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
					return $feed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
					unset($array[$key]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
	public function body(&$array)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
		foreach ($array as $key => $value)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
		{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
			if ($this->checked_feeds === $this->max_checked_feeds)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
			if (preg_match('/(rss|rdf|atom|xml)/i', $value))
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
			{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
				$this->checked_feeds++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
				$headers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
					'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
   357
				);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
				$feed = $this->registry->create('File', array($value, $this->timeout, 5, null, $this->useragent));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
				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
   360
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
					return $feed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
				else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
				{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
					unset($array[$key]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
		return null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372