/3.0/modules/webdav/vendor/Sabre/DAV/Browser/GuessContentType.php
https://github.com/bouthors/gallery3-contrib · PHP · 97 lines · 29 code · 19 blank · 49 comment · 3 complexity · 8e42dcfc3b14a59632c478c392dda3af MD5 · raw file
- <?php
- /**
- * 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.
- *
- * @package Sabre
- * @subpackage DAV
- * @copyright Copyright (C) 2007-2010 Rooftop Solutions. All rights reserved.
- * @author Evert Pot (http://www.rooftopsolutions.nl/)
- * @license http://code.google.com/p/sabredav/wiki/License Modified BSD License
- */
- class Sabre_DAV_Browser_GuessContentType extends Sabre_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 Sabre_DAV_Server $server
- * @return void
- */
- public function initialize(Sabre_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) = Sabre_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 = substr($fileName,strrpos($fileName,'.')+1);
- if (isset($this->extensionMap[$extension]))
- return $this->extensionMap[$extension];
- }
- }