Location: PHPKode > projects > OpenRat CMS > openrat/textClasses/LinkElement.class.php
<?php

/**
 * Darstellung eines Verweises auf eine URL.<br>
 * <br>
 * Es wird nur das Verweisziel gespeichert.<br>
 * Der verweisende Text wird nicht hier, sondern in einem der Unterelemente gespeichert.
 * 
 * @author $Author$
 * @version $Revision$
 * @package openrat.text
 */
class LinkElement extends AbstractElement
{
	var $target;
	var $mail;
	var $protocol = '';
	var $objectId = 0;
	var $user = '';
	var $password = '';
	var $host = '';
	var $port     = '';
	var $query    = '';
	var $fragment = '';
	var $path     = '';
	
	var $name;
	
	/**
	 * Setzt das Ziel des Links.<br>
	 * Als Parameter wird eine URL erwartet.
	 * 
	 * @param target Verweisziel
	 */
	function setTarget( $target )
	{
		$this->target = $target;
		
		$url = parse_url( $target );

		$this->protocol = @$url['scheme'];
		$this->user     = @$url['user'  ];
		$this->password = @$url['pass'  ];
		$this->host     = @$url['host'  ];
		$this->port     = @$url['port'  ];
		$this->path     = @$url['path'  ];
		$this->query    = @$url['query' ];
		$this->fragment = @$url['fragment'];
			
		if	( $this->protocol == 'object' )
			$this->objectId = intval($url['host']);

		
		if	( $this->protocol == '' )
		{
			if	( strpos($target,'@') !== false )
			{
				$this->protocol = 'mailto';
				$this->path     = $this->target;
			}
			
			// "..."->"123"
			if	( intval($url['path']) > 0 )
			{
				$this->protocol = 'object';
				$this->objectId = intval($url['path']);
			}
		}
	}
	

	/**
	 * Ermittelt die URL des Links.
	 */
	function getUrl()
	{
		$url = '';
		
		// Protokollangabe im Format <protokoll>://
		if	( $this->protocol != '')
		{
			$url .= $this->protocol.':';
		
			// Ausnahme: Das "mailto"-Protokoll darf keinen Doppelslash haben.
			if	( $this->protocol != 'mailto' )
				$url.='//';
		}
			
		// Benutzer und Kennwort anhängen.
		// Format: <benutzer>:<kennwort>@
		if	( $this->user != '' )
		{
			$url .= $this->user;
			if	( $this->password != '' )
			{
				$url .= ':'.$this->password;
			}
			$url .= '@';
		}
		
		// Hostnamen anhängen.
		$url .= $this->host;
		
		// Port anhängen
		if	( $this->port != '' )
			$url .= ':'.$this->port;
		
		// Den Pfad anhängen.
		$url .= $this->url_encode($this->path);

		// Den Query-Teil mit einem "?" getrennt anhängen.
		if	( $this->query != '' )
			$url .= '?'.$this->url_encode($this->query);
//			$url .= '?'.urlencode($this->query);

		// Fragment mit "#" getrennt anhängen.
		if	( $this->fragment != '' )
			$url .= '#'.$this->url_encode($this->fragment);

		return $url;
	}
	
	
	
	/**
	 * Hilfsfunktion für #url_encode().
	 * Ein Ganzzahl-Wert wird in Hexadezimal umgewandelt. 
	 */
	function int2hex($intega)
	{
	   	$Ziffer = "0123456789ABCDEF";
		return $Ziffer[($intega%256)/16].$Ziffer[$intega%16];
	}
	
	
	
	/**
	 * Kodiert eine URL.<br>
	 * Alle Zeichen mit dem Ordinalwert >=129 werden kodiert.
	 */
	function url_encode( $text )
	{
		for($i=129;$i<255;$i++)
		{
			$in   = chr($i);
			$out  = "%C3%".$this->int2hex($i-64);
			$text = str_replace($in,$out,$text);
		}
		return $text;
	}
}

?>
Return current item: OpenRat CMS