aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/lib/SabreDAV/lib/OldSabre/DAV/Browser/GuessContentType.php
blob: 050a2431e8fb436fed863b8d94e9adc2d09d15ba (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php

namespace OldSabre\DAV\Browser;

use OldSabre\DAV;

/**
 * GuessContentType plugin
 *
 * A lot of the built-in File objects just return application/octet-stream
 * as a content-type by default. This is a problem for some clients, because
 * they expect a correct contenttype.
 *
 * There's really no accurate, fast and portable way to determine the contenttype
 * so this extension does what the rest of the world does, and guesses it based
 * on the file extension.
 *
 * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/).
 * @author Evert Pot (http://evertpot.com/)
 * @license http://sabre.io/license/ Modified BSD License
 */
class GuessContentType extends DAV\ServerPlugin {

    /**
     * List of recognized file extensions
     *
     * Feel free to add more
     *
     * @var array
     */
    public $extensionMap = array(

        // images
        'jpg' => 'image/jpeg',
        'gif' => 'image/gif',
        'png' => 'image/png',

        // groupware
        'ics' => 'text/calendar',
        'vcf' => 'text/x-vcard',

        // text
        'txt' => 'text/plain',

    );

    /**
     * Initializes the plugin
     *
     * @param DAV\Server $server
     * @return void
     */
    public function initialize(DAV\Server $server) {

        // Using a relatively low priority (200) to allow other extensions
        // to set the content-type first.
        $server->subscribeEvent('afterGetProperties',array($this,'afterGetProperties'),200);

    }

    /**
     * Handler for teh afterGetProperties event
     *
     * @param string $path
     * @param array $properties
     * @return void
     */
    public function afterGetProperties($path, &$properties) {

        if (array_key_exists('{DAV:}getcontenttype', $properties[404])) {

            list(, $fileName) = DAV\URLUtil::splitPath($path);
            $contentType = $this->getContentType($fileName);

            if ($contentType) {
                $properties[200]['{DAV:}getcontenttype'] = $contentType;
                unset($properties[404]['{DAV:}getcontenttype']);
            }

        }

    }

    /**
     * Simple method to return the contenttype
     *
     * @param string $fileName
     * @return string
     */
    protected function getContentType($fileName) {

        // Just grabbing the extension
        $extension = strtolower(substr($fileName,strrpos($fileName,'.')+1));
        if (isset($this->extensionMap[$extension]))
            return $this->extensionMap[$extension];

    }

}

© 2014-2024 Faster IT GmbH | imprint | privacy policy