[ Index ] |
PHP Cross Reference of DokuWiki |
[Summary view] [Print] [Text view]
1 <?php 2 3 namespace dokuwiki\File; 4 5 use JpegMeta; 6 7 class MediaFile 8 { 9 protected $id; 10 protected $path; 11 12 protected $mime; 13 protected $ext; 14 protected $downloadable; 15 16 protected $width; 17 protected $height; 18 protected $meta; 19 20 /** 21 * MediaFile constructor. 22 * @param string $id 23 * @param string|int $rev optional revision 24 */ 25 public function __construct($id, $rev = '') 26 { 27 $this->id = $id; //FIXME should it be cleaned? 28 $this->path = mediaFN($id, $rev); 29 30 [$this->ext, $this->mime, $this->downloadable] = mimetype($this->path, false); 31 } 32 33 /** @return string */ 34 public function getId() 35 { 36 return $this->id; 37 } 38 39 /** @return string */ 40 public function getPath() 41 { 42 return $this->path; 43 } 44 45 /** 46 * The ID without namespace, used for display purposes 47 * 48 * @return string 49 */ 50 public function getDisplayName() 51 { 52 return noNS($this->id); 53 } 54 55 /** @return string */ 56 public function getMime() 57 { 58 if (!$this->mime) return 'application/octet-stream'; 59 return $this->mime; 60 } 61 62 /** @return string */ 63 public function getExtension() 64 { 65 return (string)$this->ext; 66 } 67 68 /** 69 * Similar to the extesion but does some clean up 70 * 71 * @return string 72 */ 73 public function getIcoClass() 74 { 75 $ext = $this->getExtension(); 76 if ($ext === '') $ext = 'file'; 77 return preg_replace('/[^_\-a-z0-9]+/i', '_', $ext); 78 } 79 80 /** 81 * Should this file be downloaded instead being displayed inline? 82 * 83 * @return bool 84 */ 85 public function isDownloadable() 86 { 87 return $this->downloadable; 88 } 89 90 /** @return int */ 91 public function getFileSize() 92 { 93 return filesize($this->path); 94 } 95 96 /** @return int */ 97 public function getLastModified() 98 { 99 return filemtime($this->path); 100 } 101 102 /** @return bool */ 103 public function isWritable() 104 { 105 return is_writable($this->path); 106 } 107 108 /** @return bool */ 109 public function isImage() 110 { 111 return (str_starts_with($this->mime, 'image/')); 112 } 113 114 /** 115 * initializes width and height for images when requested 116 */ 117 protected function initSizes() 118 { 119 $this->width = 0; 120 $this->height = 0; 121 if (!$this->isImage()) return; 122 $info = getimagesize($this->path); 123 if ($info === false) return; 124 [$this->width, $this->height] = $info; 125 } 126 127 /** 128 * Returns the width if this is a supported image, 0 otherwise 129 * 130 * @return int 131 */ 132 public function getWidth() 133 { 134 if ($this->width === null) $this->initSizes(); 135 return $this->width; 136 } 137 138 /** 139 * Returns the height if this is a supported image, 0 otherwise 140 * 141 * @return int 142 */ 143 public function getHeight() 144 { 145 if ($this->height === null) $this->initSizes(); 146 return $this->height; 147 } 148 149 /** 150 * Returns the permissions the current user has on the file 151 * 152 * @todo doing this for each file within a namespace is a waste, we need to cache this somehow 153 * @return int 154 */ 155 public function userPermission() 156 { 157 return auth_quickaclcheck(getNS($this->id) . ':*'); 158 } 159 160 /** @return JpegMeta */ 161 public function getMeta() 162 { 163 if ($this->meta === null) $this->meta = new JpegMeta($this->path); 164 return $this->meta; 165 } 166 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body