raw download support
[phorkie.git] / src / Phorkie / File.php
1 <?php
2 namespace Phorkie;
3
4 class File
5 {
6     /**
7      * Full path to the file
8      *
9      * @var string
10      */
11     public $path;
12
13     /**
14      * Repository this file belongs to
15      *
16      * @var string
17      */
18     public $repo;
19
20     public static $arMimeTypeMap = array(
21         'css'  => 'text/css',
22         'htm'  => 'text/html',
23         'html' => 'text/html',
24         'js'   => 'application/javascript',
25         'php'  => 'text/x-php',
26         'txt'  => 'text/plain',
27     );
28
29     public function __construct($path, Repository $repo)
30     {
31         $this->path = $path;
32         $this->repo = $repo;
33     }
34
35     /**
36      * Get filename relative to the repository path
37      *
38      * @return string
39      */
40     public function getFilename()
41     {
42         return basename($this->path);
43     }
44
45     /**
46      * Returns the type of the file, as used internally by Phorkie
47      *
48      * @return string
49      */
50     public function getType()
51     {
52         return substr($this->path, strrpos($this->path, '.') + 1);
53     }
54
55     public function getContent()
56     {
57         return file_get_contents($this->path);
58     }
59
60     public function getMimeType()
61     {
62         $type = $this->getType();
63         if (!isset(static::$arMimeTypeMap[$type])) {
64             return null;
65         }
66         return static::$arMimeTypeMap[$type];
67     }
68
69     /**
70      * Get a link to the file
71      *
72      * @param string $type Link type. Supported are:
73      *                     - "raw"
74      *                     - "display"
75      *
76      * @return string
77      */
78     public function getLink($type)
79     {
80         if ($type == 'raw') {
81             return '/' . $this->repo->id . '/raw/' . $this->getFilename();
82         }
83         throw new Exception('Unknown type');
84     }
85 }
86
87 ?>