Fix bugs with international filenames
[gitphp.git] / include / Util.class.php
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<?php
/**
 * GitPHP Util
 *
 * Utility functions
 *
 * @author Christopher Han <xiphux@gmail.com>
 * @copyright Copyright (c) 2010 Christopher Han
 * @package GitPHP
 */
 
/**
 * Util class
 *
 * @package GitPHP
 */
class GitPHP_Util
{
 
        /**
         * AddSlash
         *
         * Adds a trailing slash to a directory path if necessary
         *
         * @access public
         * @static
         * @param string $path path to add slash to
         * @param $filesystem true if this is a filesystem path (to also check for backslash for windows paths)
         * @return string $path with a trailing slash
         */
        public static function AddSlash($path, $filesystem = true)
        {
                if (empty($path))
                        return $path;
 
                $end = substr($path, -1);
 
                if (!(( ($end == '/') || ($end == ':')) || ($filesystem && GitPHP_Util::IsWindows() && ($end == '\\')))) {
                        if (GitPHP_Util::IsWindows() && $filesystem) {
                                $path .= '\\';
                        } else {
                                $path .= '/';
                        }
                }
 
                return $path;
        }
 
        /**
         * IsWindows
         *
         * Tests if this is running on windows
         *
         * @access public
         * @static
         * @return bool true if on windows
         */
        public static function IsWindows()
        {
                return (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN');
        }
 
        /**
         * Is64Bit
         *
         * Tests if this is a 64 bit machine
         *
         * @access public
         * @static
         * @return bool true if on 64 bit
         */
        public static function Is64Bit()
        {
                return (strpos(php_uname('m'), '64') !== false);
        }
 
        /**
         * MakeSlug
         *
         * Turn a string into a filename-friendly slug
         *
         * @access public
         * @param string $str string to slugify
         * @static
         * @return string slug
         */
        public static function MakeSlug($str)
        {
                $from = array(
                        '/'
                );
                $to = array(
                        '-'
                );
                return str_replace($from, $to, $str);
        }
 
        /**
         * BaseName
         *
         * Get the filename of a given path
         *
         * based on Drupal's basename
         *
         * @access public
         * @param string $path path
         * @param string $suffix optionally trim this suffix
         * @static
         * @return string filename
         */
        public static function BaseName($path, $suffix = null)
        {
                $sep = '/';
                if (GitPHP_Util::IsWindows()) {
                        $sep .= '\\';
                }
 
                $path = rtrim($path, $sep);
 
                if (!preg_match('@[^' . preg_quote($sep) . ']+$@', $path, $matches)) {
                        return '';
                }
 
                $filename = $matches[0];
 
                if ($suffix) {
                        $filename = preg_replace('@' . preg_quote($suffix, '@') . '$@', '', $filename);
                }
                return $filename;
        }
 
}
 
comments