openrat-cms

# OpenRat Content Management System
git clone http://git.code.weiherhei.de/openrat-cms.git
Log | Files | Refs

LinkElement.class.php (3078B)


      1 <?php
      2 
      3 /**
      4  * Darstellung eines Verweises auf eine URL.<br>
      5  * <br>
      6  * Es wird nur das Verweisziel gespeichert.<br>
      7  * Der verweisende Text wird nicht hier, sondern in einem der Unterelemente gespeichert.
      8  * 
      9  * @author $Author$
     10  * @version $Revision$
     11  * @package openrat.text
     12  */
     13 class LinkElement extends AbstractElement
     14 {
     15 	var $target;
     16 	var $mail;
     17 	var $protocol = '';
     18 	var $objectId = 0;
     19 	var $user = '';
     20 	var $password = '';
     21 	var $host = '';
     22 	var $port     = '';
     23 	var $query    = '';
     24 	var $fragment = '';
     25 	var $path     = '';
     26 	
     27 	var $name;
     28 	
     29 	/**
     30 	 * Setzt das Ziel des Links.<br>
     31 	 * Als Parameter wird eine URL erwartet.
     32 	 * 
     33 	 * @param target Verweisziel
     34 	 */
     35 	function setTarget( $target )
     36 	{
     37 		$this->target = $target;
     38 		
     39 		$url = parse_url( $target );
     40 
     41 		$this->protocol = @$url['scheme'];
     42 		$this->user     = @$url['user'  ];
     43 		$this->password = @$url['pass'  ];
     44 		$this->host     = @$url['host'  ];
     45 		$this->port     = @$url['port'  ];
     46 		$this->path     = @$url['path'  ];
     47 		$this->query    = @$url['query' ];
     48 		$this->fragment = @$url['fragment'];
     49 			
     50 		if	( $this->protocol == 'object' )
     51 			$this->objectId = intval($url['host']);
     52 
     53 		
     54 		if	( $this->protocol == '' )
     55 		{
     56 			if	( strpos($target,'@') !== false )
     57 			{
     58 				$this->protocol = 'mailto';
     59 				$this->path     = $this->target;
     60 			}
     61 			
     62 			// "..."->"123"
     63 			if	( intval($url['path']) > 0 )
     64 			{
     65 				$this->protocol = 'object';
     66 				$this->objectId = intval($url['path']);
     67 			}
     68 		}
     69 	}
     70 	
     71 
     72 	/**
     73 	 * Ermittelt die URL des Links.
     74 	 */
     75 	function getUrl()
     76 	{
     77 		$url = '';
     78 		
     79 		// Protokollangabe im Format <protokoll>://
     80 		if	( $this->protocol != '')
     81 		{
     82 			$url .= $this->protocol.':';
     83 		
     84 			// Ausnahme: Das "mailto"-Protokoll darf keinen Doppelslash haben.
     85 			if	( $this->protocol != 'mailto' )
     86 				$url.='//';
     87 		}
     88 			
     89 		// Benutzer und Kennwort anh�ngen.
     90 		// Format: <benutzer>:<kennwort>@
     91 		if	( $this->user != '' )
     92 		{
     93 			$url .= $this->user;
     94 			if	( $this->password != '' )
     95 			{
     96 				$url .= ':'.$this->password;
     97 			}
     98 			$url .= '@';
     99 		}
    100 		
    101 		// Hostnamen anh�ngen.
    102 		$url .= $this->host;
    103 		
    104 		// Port anh�ngen
    105 		if	( $this->port != '' )
    106 			$url .= ':'.$this->port;
    107 		
    108 		// Den Pfad anh�ngen.
    109 		$url .= $this->url_encode($this->path);
    110 
    111 		// Den Query-Teil mit einem "?" getrennt anh�ngen.
    112 		if	( $this->query != '' )
    113 			$url .= '?'.$this->url_encode($this->query);
    114 //			$url .= '?'.urlencode($this->query);
    115 
    116 		// Fragment mit "#" getrennt anh�ngen.
    117 		if	( $this->fragment != '' )
    118 			$url .= '#'.$this->url_encode($this->fragment);
    119 
    120 		return $url;
    121 	}
    122 	
    123 	
    124 	
    125 	/**
    126 	 * Hilfsfunktion f�r #url_encode().
    127 	 * Ein Ganzzahl-Wert wird in Hexadezimal umgewandelt. 
    128 	 */
    129 	private function int2hex($intega)
    130 	{
    131 	   	$Ziffer = "0123456789ABCDEF";
    132 		return @$Ziffer[($intega%256)/16].$Ziffer[$intega%16];
    133 	}
    134 	
    135 	
    136 	
    137 	/**
    138 	 * Kodiert eine URL.<br>
    139 	 * Alle Zeichen mit dem Ordinalwert >=129 werden kodiert.
    140 	 */
    141 	private function url_encode( $text )
    142 	{
    143 		for($i=129;$i<255;$i++)
    144 		{
    145 			$in   = chr($i);
    146 			$out  = "%C3%".$this->int2hex($i-64);
    147 			$text = str_replace($in,$out,$text);
    148 		}
    149 		return $text;
    150 	}
    151 }
    152 
    153 ?>