File modules/wikiparser/model/LinkElement.class.php

Last commit: Sat Feb 22 22:45:05 2020 +0100	Jan Dankert	Refactoring: Enable Autoloading, Fix namespace structure.
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 ?>
Download modules/wikiparser/model/LinkElement.class.php
History Sat, 22 Feb 2020 22:45:05 +0100 Jan Dankert Refactoring: Enable Autoloading, Fix namespace structure.