openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

LinkElement.class.php (3060B)


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