1<?php 2 3namespace Sabre\DAV\Browser; 4 5use Sabre\Uri; 6use Sabre\Xml\Service as XmlService; 7 8/** 9 * This class provides a few utility functions for easily generating HTML for 10 * the browser plugin. 11 * 12 * @copyright Copyright (C) fruux GmbH (https://fruux.com/) 13 * @author Evert Pot (http://evertpot.com/) 14 * @license http://sabre.io/license/ Modified BSD License 15 */ 16class HtmlOutputHelper { 17 18 /** 19 * Link to the root of the application. 20 * 21 * @var string 22 */ 23 protected $baseUri; 24 25 /** 26 * List of xml namespaces. 27 * 28 * @var array 29 */ 30 protected $namespaceMap; 31 32 /** 33 * Creates the object. 34 * 35 * baseUri must point to the root of the application. This will be used to 36 * easily generate links. 37 * 38 * The namespaceMap contains an array with the list of xml namespaces and 39 * their prefixes. WebDAV uses a lot of XML with complex namespaces, so 40 * that can be used to make output a lot shorter. 41 * 42 * @param string $baseUri 43 * @param array $namespaceMap 44 */ 45 function __construct($baseUri, array $namespaceMap) { 46 47 $this->baseUri = $baseUri; 48 $this->namespaceMap = $namespaceMap; 49 50 } 51 52 /** 53 * Generates a 'full' url based on a relative one. 54 * 55 * For relative urls, the base of the application is taken as the reference 56 * url, not the 'current url of the current request'. 57 * 58 * Absolute urls are left alone. 59 * 60 * @param string $path 61 * @return string 62 */ 63 function fullUrl($path) { 64 65 return Uri\resolve($this->baseUri, $path); 66 67 } 68 69 /** 70 * Escape string for HTML output. 71 * 72 * @param string $input 73 * @return string 74 */ 75 function h($input) { 76 77 return htmlspecialchars($input, ENT_COMPAT, 'UTF-8'); 78 79 } 80 81 /** 82 * Generates a full <a>-tag. 83 * 84 * Url is automatically expanded. If label is not specified, we re-use the 85 * url. 86 * 87 * @param string $url 88 * @param string $label 89 * @return string 90 */ 91 function link($url, $label = null) { 92 93 $url = $this->h($this->fullUrl($url)); 94 return '<a href="' . $url . '">' . ($label ? $this->h($label) : $url) . '</a>'; 95 96 } 97 98 /** 99 * This method takes an xml element in clark-notation, and turns it into a 100 * shortened version with a prefix, if it was a known namespace. 101 * 102 * @param string $element 103 * @return string 104 */ 105 function xmlName($element) { 106 107 list($ns, $localName) = XmlService::parseClarkNotation($element); 108 if (isset($this->namespaceMap[$ns])) { 109 $propName = $this->namespaceMap[$ns] . ':' . $localName; 110 } else { 111 $propName = $element; 112 } 113 return "<span title=\"" . $this->h($element) . "\">" . $this->h($propName) . "</span>"; 114 115 } 116 117} 118