xref: /dokuwiki/inc/Remote/Response/Media.php (revision d48c2b252a339bed693da46fae768d93f4b3fe41)
16cce3332SAndreas Gohr<?php
26cce3332SAndreas Gohr
36cce3332SAndreas Gohrnamespace dokuwiki\Remote\Response;
46cce3332SAndreas Gohr
5d1f06eb4SAndreas Gohruse dokuwiki\ChangeLog\MediaChangeLog;
6d1f06eb4SAndreas Gohr
76cce3332SAndreas Gohr/**
86cce3332SAndreas Gohr * Represents a single media revision in the wiki.
96cce3332SAndreas Gohr */
106cce3332SAndreas Gohrclass Media extends ApiResponse
116cce3332SAndreas Gohr{
126cce3332SAndreas Gohr    /** @var string The media ID */
136cce3332SAndreas Gohr    public $id;
146cce3332SAndreas Gohr    /** @var int The media revision aka last modified timestamp */
156cce3332SAndreas Gohr    public $revision;
166cce3332SAndreas Gohr    /** @var int The page size in bytes */
176cce3332SAndreas Gohr    public $size;
186cce3332SAndreas Gohr    /** @var int The current user's permissions for this file */
1958ae4747SAndreas Gohr    public $permission;
206cce3332SAndreas Gohr    /** @var bool Wether this is an image file */
216cce3332SAndreas Gohr    public $isimage;
226cce3332SAndreas Gohr    /** @var string MD5 sum over the file's content (if available and requested) */
236cce3332SAndreas Gohr    public $hash;
24d1f06eb4SAndreas Gohr    /** @var string The author of this page revision (if available and requested) */
25d1f06eb4SAndreas Gohr    public $author;
266cce3332SAndreas Gohr
2758ae4747SAndreas Gohr    /** @var string The file path to this media revision */
2858ae4747SAndreas Gohr    protected $file;
2958ae4747SAndreas Gohr
3058ae4747SAndreas Gohr    /**
3158ae4747SAndreas Gohr     * Media constructor.
3258ae4747SAndreas Gohr     *
3358ae4747SAndreas Gohr     * @param string $id The media ID
3458ae4747SAndreas Gohr     * @param int $revision The media revision aka last modified timestamp
3558ae4747SAndreas Gohr     * @param int $mtime The media revision aka last modified timestamp
3658ae4747SAndreas Gohr     * @param int|null $size The page size in bytes
3758ae4747SAndreas Gohr     * @param int|null $perms The current user's permissions for this file
3858ae4747SAndreas Gohr     * @param bool|null $isimage Wether this is an image file
3958ae4747SAndreas Gohr     * @param string $hash MD5 sum over the file's content
4058ae4747SAndreas Gohr     */
4158ae4747SAndreas Gohr    public function __construct(
4258ae4747SAndreas Gohr        $id,
4358ae4747SAndreas Gohr        $revision = 0,
4458ae4747SAndreas Gohr        $mtime = 0,
4558ae4747SAndreas Gohr        $size = null,
4658ae4747SAndreas Gohr        $perms = null,
4758ae4747SAndreas Gohr        $isimage = null,
48d1f06eb4SAndreas Gohr        $hash = '',
49d1f06eb4SAndreas Gohr        $author = ''
50*d48c2b25SAndreas Gohr    ) {
5158ae4747SAndreas Gohr        $this->id = $id;
5258ae4747SAndreas Gohr        $this->file = mediaFN($this->id, $revision);
5358ae4747SAndreas Gohr        $this->revision = $revision ?: $mtime ?: filemtime($this->file);
5458ae4747SAndreas Gohr        $this->size = $size ?? filesize($this->file);
55*d48c2b25SAndreas Gohr        $this->permission = $perms ?? auth_quickaclcheck($this->id);
56*d48c2b25SAndreas Gohr        ;
57d1f06eb4SAndreas Gohr        $this->isimage = (bool)($isimage ?? preg_match("/\.(jpe?g|gif|png)$/", $id));
5858ae4747SAndreas Gohr        $this->hash = $hash;
59d1f06eb4SAndreas Gohr        $this->author = $author;
606cce3332SAndreas Gohr    }
616cce3332SAndreas Gohr
626cce3332SAndreas Gohr    /**
636cce3332SAndreas Gohr     * Calculate the hash for this page
646cce3332SAndreas Gohr     *
656cce3332SAndreas Gohr     * This is a heavy operation and should only be called when needed.
666cce3332SAndreas Gohr     */
676cce3332SAndreas Gohr    public function calculateHash()
686cce3332SAndreas Gohr    {
6958ae4747SAndreas Gohr        $this->hash = md5(io_readFile($this->file, false));
706cce3332SAndreas Gohr    }
718268b284SAndreas Gohr
72d1f06eb4SAndreas Gohr    /**
73d1f06eb4SAndreas Gohr     * Retrieve the author of this page
74d1f06eb4SAndreas Gohr     */
75d1f06eb4SAndreas Gohr    public function retrieveAuthor()
76d1f06eb4SAndreas Gohr    {
77d1f06eb4SAndreas Gohr        $pagelog = new MediaChangeLog($this->id, 1024);
78d1f06eb4SAndreas Gohr        $info = $pagelog->getRevisionInfo($this->revision);
79d1f06eb4SAndreas Gohr        $this->author = is_array($info) ? ($info['user'] ?: $info['ip']) : '';
80d1f06eb4SAndreas Gohr    }
81d1f06eb4SAndreas Gohr
828268b284SAndreas Gohr    /** @inheritdoc */
838268b284SAndreas Gohr    public function __toString()
848268b284SAndreas Gohr    {
858268b284SAndreas Gohr        return $this->id . '@' . $this->revision;
868268b284SAndreas Gohr    }
876cce3332SAndreas Gohr}
88