OCA\Richdocuments\DownloadResponse::render PHP Méthode

render() public méthode

public render ( )
    public function render()
    {
        if ($this->getStatus() === Http::STATUS_NOT_FOUND) {
            return '';
        }
        $info = $this->view->getFileInfo($this->path);
        $this->ETag = $info['etag'];
        $content = $this->view->file_get_contents($this->path);
        $data = \OCA\Richdocuments\Filter::read($content, $info['mimetype']);
        $size = strlen($data['content']);
        if (isset($this->request->server['HTTP_RANGE']) && !is_null($this->request->server['HTTP_RANGE'])) {
            $isValidRange = preg_match('/^bytes=\\d*-\\d*(,\\d*-\\d*)*$/', $this->request->server['HTTP_RANGE']);
            if (!$isValidRange) {
                return $this->sendRangeNotSatisfiable($size);
            }
            $ranges = explode(',', substr($this->request->server['HTTP_RANGE'], 6));
            foreach ($ranges as $range) {
                $parts = explode('-', $range);
                if ($parts[0] === '' && $parts[1] == '') {
                    $this->sendNotSatisfiable($size);
                }
                if ($parts[0] === '') {
                    $start = $size - $parts[1];
                    $end = $size - 1;
                } else {
                    $start = $parts[0];
                    $end = $parts[1] === '' ? $size - 1 : $parts[1];
                }
                if ($start > $end) {
                    $this->sendNotSatisfiable($size);
                }
                $buffer = substr($data['content'], $start, $end - $start);
                $md5Sum = md5($buffer);
                // send the headers and data
                $this->addHeader('Content-Length', $end - $start);
                $this->addHeader('Content-md5', $md5Sum);
                $this->addHeader('Accept-Ranges', 'bytes');
                $this->addHeader('Content-Range', 'bytes ' . $start . '-' . $end . '/' . $size);
                $this->addHeader('Connection', 'close');
                $this->addHeader('Content-Type', $data['mimetype']);
                $this->addContentDispositionHeader();
                return $buffer;
            }
        }
        $this->addHeader('Content-Type', $data['mimetype']);
        $this->addContentDispositionHeader();
        $this->addHeader('Content-Length', $size);
        return $data['content'];
    }