| 
							- <?php
 - 
 - namespace dokuwiki\File;
 - 
 - use JpegMeta;
 - 
 - class MediaFile
 - {
 -     protected $id;
 -     protected $rev;
 -     protected $path;
 - 
 -     protected $mime;
 -     protected $ext;
 -     protected $downloadable;
 - 
 -     protected $width;
 -     protected $height;
 -     protected $meta;
 - 
 -     /**
 -      * MediaFile constructor.
 -      * @param string $id
 -      * @param string|int $rev optional revision
 -      */
 -     public function __construct($id, $rev = '')
 -     {
 -         $this->id = $id; //FIXME should it be cleaned?
 -         $this->path = mediaFN($id, $rev);
 -         $this->rev = $rev;
 - 
 -         [$this->ext, $this->mime, $this->downloadable] = mimetype($this->path, false);
 -     }
 - 
 -     /** @return string */
 -     public function getId()
 -     {
 -         return $this->id;
 -     }
 - 
 -     /** @return string|int Empty string for current version */
 -     public function getRev()
 -     {
 -         return $this->rev;
 -     }
 - 
 -     /** @return string */
 -     public function getPath()
 -     {
 -         return $this->path;
 -     }
 - 
 -     /**
 -      * The ID without namespace, used for display purposes
 -      *
 -      * @return string
 -      */
 -     public function getDisplayName()
 -     {
 -         return noNS($this->id);
 -     }
 - 
 -     /** @return string */
 -     public function getMime()
 -     {
 -         if (!$this->mime) return 'application/octet-stream';
 -         return $this->mime;
 -     }
 - 
 -     /** @return string */
 -     public function getExtension()
 -     {
 -         return (string)$this->ext;
 -     }
 - 
 -     /**
 -      * Similar to the extesion but does some clean up
 -      *
 -      * @return string
 -      */
 -     public function getIcoClass()
 -     {
 -         $ext = $this->getExtension();
 -         if ($ext === '') $ext = 'file';
 -         return preg_replace('/[^_\-a-z0-9]+/i', '_', $ext);
 -     }
 - 
 -     /**
 -      * Should this file be downloaded instead being displayed inline?
 -      *
 -      * @return bool
 -      */
 -     public function isDownloadable()
 -     {
 -         return $this->downloadable;
 -     }
 - 
 -     /** @return int */
 -     public function getFileSize()
 -     {
 -         return filesize($this->path);
 -     }
 - 
 -     /** @return int */
 -     public function getLastModified()
 -     {
 -         return filemtime($this->path);
 -     }
 - 
 -     /** @return bool */
 -     public function isWritable()
 -     {
 -         return is_writable($this->path);
 -     }
 - 
 -     /** @return bool */
 -     public function isImage()
 -     {
 -         return (str_starts_with($this->mime, 'image/'));
 -     }
 - 
 -     /**
 -      * initializes width and height for images when requested
 -      */
 -     protected function initSizes()
 -     {
 -         $this->width = 0;
 -         $this->height = 0;
 -         if (!$this->isImage()) return;
 -         $info = getimagesize($this->path);
 -         if ($info === false) return;
 -         [$this->width, $this->height] = $info;
 -     }
 - 
 -     /**
 -      * Returns the width if this is a supported image, 0 otherwise
 -      *
 -      * @return int
 -      */
 -     public function getWidth()
 -     {
 -         if ($this->width === null) $this->initSizes();
 -         return $this->width;
 -     }
 - 
 -     /**
 -      * Returns the height if this is a supported image, 0 otherwise
 -      *
 -      * @return int
 -      */
 -     public function getHeight()
 -     {
 -         if ($this->height === null) $this->initSizes();
 -         return $this->height;
 -     }
 - 
 -     /**
 -      * Returns the permissions the current user has on the file
 -      *
 -      * @todo doing this for each file within a namespace is a waste, we need to cache this somehow
 -      * @return int
 -      */
 -     public function userPermission()
 -     {
 -         return auth_quickaclcheck(getNS($this->id) . ':*');
 -     }
 - 
 -     /** @return JpegMeta */
 -     public function getMeta()
 -     {
 -         if ($this->meta === null) $this->meta = new JpegMeta($this->path);
 -         return $this->meta;
 -     }
 - }
 
 
  |