aboutsummaryrefslogtreecommitdiff
path: root/src/Phorkie/File.php
blob: 729cbd6aaaf6293bf3e65cc309717915a8df6c29 (plain)
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
100
101
<?php
namespace Phorkie;

class File
{
    /**
     * Full path to the file
     *
     * @var string
     */
    public $path;

    /**
     * Repository this file belongs to
     *
     * @var string
     */
    public $repo;

    public static $arMimeTypeMap = array(
        'css'  => 'text/css',
        'htm'  => 'text/html',
        'html' => 'text/html',
        'js'   => 'application/javascript',
        'php'  => 'text/x-php',
        'txt'  => 'text/plain',
        'xml'  => 'text/xml',
    );

    public function __construct($path, Repository $repo)
    {
        $this->path = $path;
        $this->repo = $repo;
    }

    /**
     * Get filename relative to the repository path
     *
     * @return string
     */
    public function getFilename()
    {
        return basename($this->path);
    }

    /**
     * Returns the type of the file, as used internally by Phorkie
     *
     * @return string
     */
    public function getType()
    {
        return substr($this->path, strrpos($this->path, '.') + 1);
    }

    public function getContent()
    {
        return file_get_contents($this->path);
    }

    public function getHighlightedContent()
    {
        /**
         * Yes, geshi needs to be in your include path
         * We use the mediawiki geshi extension package.
         */
        require 'MediaWiki/geshi/geshi/geshi.php';
        $geshi = new \GeSHi($this->getContent(), $this->getType());
        $geshi->enable_line_numbers(GESHI_NORMAL_LINE_NUMBERS);
        $geshi->set_header_type(GESHI_HEADER_DIV);
        return $geshi->parse_code();
    }

    public function getMimeType()
    {
        $type = $this->getType();
        if (!isset(static::$arMimeTypeMap[$type])) {
            return null;
        }
        return static::$arMimeTypeMap[$type];
    }

    /**
     * Get a link to the file
     *
     * @param string $type Link type. Supported are:
     *                     - "raw"
     *                     - "display"
     *
     * @return string
     */
    public function getLink($type)
    {
        if ($type == 'raw') {
            return '/' . $this->repo->id . '/raw/' . $this->getFilename();
        }
        throw new Exception('Unknown type');
    }
}

?>