diff options
| author | ctrlaltca@gmail.com <> | 2011-11-19 11:33:31 +0000 | 
|---|---|---|
| committer | ctrlaltca@gmail.com <> | 2011-11-19 11:33:31 +0000 | 
| commit | 98dbe6f0d2edfff3a1f5785504504b4a6e5dd4eb (patch) | |
| tree | 89f19120abb170cb37bb512c8c9535eb2b451da8 /buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php | |
| parent | 1f09b786730956d01c48a82272617a0f8b2597f0 (diff) | |
updating phpDocumentor, part 2: add new version
Diffstat (limited to 'buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php')
| -rw-r--r-- | buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php | 217 | 
1 files changed, 217 insertions, 0 deletions
| diff --git a/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php new file mode 100644 index 00000000..264e78d2 --- /dev/null +++ b/buildscripts/PhpDocumentor/phpDocumentor/Smarty-2.6.0/libs/plugins/function.fetch.php @@ -0,0 +1,217 @@ +<?php +/** + * Smarty plugin + * @package Smarty + * @subpackage plugins + */ + + +/** + * Smarty {fetch} plugin + * + * Type:     function<br> + * Name:     fetch<br> + * Purpose:  fetch file, web or ftp data and display results + * @link http://smarty.php.net/manual/en/language.function.fetch.php {fetch} + *       (Smarty online manual) + * @param array + * @param Smarty + * @return string|null if the assign parameter is passed, Smarty assigns the + *                     result to a template variable + */ +function smarty_function_fetch($params, &$smarty) +{ +    if (empty($params['file'])) { +        $smarty->_trigger_fatal_error("[plugin] parameter 'file' cannot be empty"); +        return; +    } + +    if ($smarty->security && !preg_match('!^(http|ftp)://!i', $params['file'])) { +		$_params = array('resource_type' => 'file', 'resource_name' => $params['file']); +		require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.is_secure.php'); +		if(!smarty_core_is_secure($_params, $smarty)) { +            $smarty->_trigger_fatal_error('[plugin] (secure mode) fetch \'' . $params['file'] . '\' is not allowed'); +            return;			 +		} +		 +		// fetch the file +		if($fp = @fopen($params['file'],'r')) { +			while(!feof($fp)) { +				$content .= fgets ($fp,4096); +			} +			fclose($fp); +		} else { +            $smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] . '\''); +            return;			 +		} +    } else { +		// not a local file +		if(preg_match('!^http://!i',$params['file'])) { +			// http fetch +			if($uri_parts = parse_url($params['file'])) { +				// set defaults +				$host = $server_name = $uri_parts['host']; +				$timeout = 30; +				$accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; +				$agent = "Smarty Template Engine ".$smarty->_version; +				$referer = ""; +				$uri = !empty($uri_parts['path']) ? $uri_parts['path'] : '/'; +				$uri .= !empty($uri_parts['query']) ? '?' . $uri_parts['query'] : ''; +				$_is_proxy = false; +				if(empty($uri_parts['port'])) { +					$port = 80; +				} else { +					$port = $uri_parts['port']; +				} +				if(empty($uri_parts['user'])) { +					$user = ''; +				}				 +				// loop through parameters, setup headers +				foreach($params as $param_key => $param_value) {			 +					switch($param_key) { +						case "file": +						case "assign": +						case "assign_headers": +							break; +						case "user": +							if(!empty($param_value)) { +								$user = $param_value; +							} +							break; +						case "pass": +							if(!empty($param_value)) { +								$pass = $param_value; +							} +							break; +						case "accept": +							if(!empty($param_value)) { +								$accept = $param_value; +							} +							break; +						case "header": +							if(!empty($param_value)) { +								if(!preg_match('![\w\d-]+: .+!',$param_value)) { +            						$smarty->_trigger_fatal_error("[plugin] invalid header format '".$param_value."'"); +            						return;									 +								} else { +									$extra_headers[] = $param_value; +								} +							} +							break; +						case "proxy_host": +							if(!empty($param_value)) { +								$proxy_host = $param_value; +							} +							break; +						case "proxy_port": +							if(!preg_match('!\D!', $param_value)) { +								$proxy_port = (int) $param_value; +							} else { +            					$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); +            					return;									 +							} +							break; +						case "agent": +							if(!empty($param_value)) { +								$agent = $param_value; +							} +							break; +						case "referer": +							if(!empty($param_value)) { +								$referer = $param_value; +							} +							break; +						case "timeout": +							if(!preg_match('!\D!', $param_value)) { +								$timeout = (int) $param_value; +							} else { +            					$smarty->_trigger_fatal_error("[plugin] invalid value for attribute '".$param_key."'"); +            					return;									 +							} +							break; +						default: +            				$smarty->_trigger_fatal_error("[plugin] unrecognized attribute '".$param_key."'"); +            				return; +					}			 +				} +				if(!empty($proxy_host) && !empty($proxy_port)) { +					$_is_proxy = true; +					$fp = fsockopen($proxy_host,$proxy_port,$errno,$errstr,$timeout); +				} else { +					$fp = fsockopen($server_name,$port,$errno,$errstr,$timeout); +				} + +				if(!$fp) { +            		$smarty->_trigger_fatal_error("[plugin] unable to fetch: $errstr ($errno)"); +            		return;				 +				} else { +					if($_is_proxy) { +						fputs($fp, 'GET ' . $params['file'] . " HTTP/1.0\r\n");						 +					} else { +						fputs($fp, "GET $uri HTTP/1.0\r\n"); +					} +					if(!empty($host)) { +						fputs($fp, "Host: $host\r\n"); +					} +					if(!empty($accept)) { +						fputs($fp, "Accept: $accept\r\n"); +					} +					if(!empty($agent)) { +						fputs($fp, "User-Agent: $agent\r\n"); +					} +					if(!empty($referer)) { +						fputs($fp, "Referer: $referer\r\n"); +					} +					if(isset($extra_headers) && is_array($extra_headers)) { +						foreach($extra_headers as $curr_header) { +							fputs($fp, $curr_header."\r\n"); +						} +					} +					if(!empty($user) && !empty($pass)) { +						fputs($fp, "Authorization: BASIC ".base64_encode("$user:$pass")."\r\n");						 +					} + +					$content = '';					 +					fputs($fp, "\r\n"); +					while(!feof($fp)) { +						$content .= fgets($fp,4096); +					} +					fclose($fp);					 +					$csplit = explode("\r\n\r\n", $content, 2); + +					$content = $csplit[1]; +					 +					if(!empty($params['assign_headers'])) { +						$smarty->assign($params['assign_headers'], explode("\r\n", $csplit[0])); +					} +				} +			} else { +            		$smarty->_trigger_fatal_error("[plugin] unable to parse URL, check syntax"); +            		return; +			} +		} else { +			// ftp fetch +			if($fp = @fopen($params['file'],'r')) { +				while(!feof($fp)) { +					$content .= fgets ($fp,4096); +				} +				fclose($fp); +			} else { +            	$smarty->_trigger_fatal_error('[plugin] fetch cannot read file \'' . $params['file'] .'\''); +            	return;			 +			} +		} +		 +	} + + +    if (!empty($params['assign'])) { +        $smarty->assign($params['assign'],$content); +    } else { +        return $content; +    } +} + +/* vim: set expandtab: */ + +?> | 
