Projet

Général

Profil

Paste
Statistiques
| Branche: | Révision:

ryxeo-glpi-git / lib / tiny_mce / tiny_mce_gzip.php @ b67d8923

Historique | Voir | Annoter | Télécharger (4,85 ko)

1
<?php
2
/**
3
 * $Id: tiny_mce_gzip.php 315 2007-10-25 14:03:43Z spocke $
4
 *
5
 * @author Moxiecode
6
 * @copyright Copyright © 2005-2006, Moxiecode Systems AB, All rights reserved.
7
 *
8
 * This file compresses the TinyMCE JavaScript using GZip and
9
 * enables the browser to do two requests instead of one for each .js file.
10
 * Notice: This script defaults the button_tile_map option to true for extra performance.
11
 */
12

    
13
        // Set the error reporting to minimal.
14
        @error_reporting(E_ERROR | E_WARNING | E_PARSE);
15

    
16
        // Get input
17
        $plugins = explode(',', getParam("plugins", ""));
18
        $languages = explode(',', getParam("languages", ""));
19
        $themes = explode(',', getParam("themes", ""));
20
        $diskCache = getParam("diskcache", "") == "true";
21
        $isJS = getParam("js", "") == "true";
22
        $compress = getParam("compress", "true") == "true";
23
        $core = getParam("core", "true") == "true";
24
        $suffix = getParam("suffix", "_src") == "_src" ? "_src" : "";
25
        $cachePath = realpath("."); // Cache path, this is where the .gz files will be stored
26
        $expiresOffset = 3600 * 24 * 10; // Cache for 10 days in browser cache
27
        $content = "";
28
        $encodings = array();
29
        $supportsGzip = false;
30
        $enc = "";
31
        $cacheKey = "";
32

    
33
        // Custom extra javascripts to pack
34
        $custom = array(/*
35
                "some custom .js file",
36
                "some custom .js file"
37
        */);
38

    
39
        // Headers
40
        header("Content-type: text/javascript");
41
        header("Vary: Accept-Encoding");  // Handle proxies
42
        header("Expires: " . gmdate("D, d M Y H:i:s", time() + $expiresOffset) . " GMT");
43

    
44
        // Is called directly then auto init with default settings
45
        if (!$isJS) {
46
                echo getFileContents("tiny_mce_gzip.js");
47
                echo "tinyMCE_GZ.init({});";
48
                die();
49
        }
50

    
51
        // Setup cache info
52
        if ($diskCache) {
53
                if (!$cachePath)
54
                        die("alert('Real path failed.');");
55

    
56
                $cacheKey = getParam("plugins", "") . getParam("languages", "") . getParam("themes", "") . $suffix;
57

    
58
                foreach ($custom as $file)
59
                        $cacheKey .= $file;
60

    
61
                $cacheKey = md5($cacheKey);
62

    
63
                if ($compress)
64
                        $cacheFile = $cachePath . "/tiny_mce_" . $cacheKey . ".gz";
65
                else
66
                        $cacheFile = $cachePath . "/tiny_mce_" . $cacheKey . ".js";
67
        }
68

    
69
        // Check if it supports gzip
70
        if (isset($_SERVER['HTTP_ACCEPT_ENCODING']))
71
                $encodings = explode(',', strtolower(preg_replace("/\s+/", "", $_SERVER['HTTP_ACCEPT_ENCODING'])));
72

    
73
        if ((in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------'])) && function_exists('ob_gzhandler') && !ini_get('zlib.output_compression')) {
74
                $enc = in_array('x-gzip', $encodings) ? "x-gzip" : "gzip";
75
                $supportsGzip = true;
76
        }
77

    
78
        // Use cached file disk cache
79
        if ($diskCache && $supportsGzip && file_exists($cacheFile)) {
80
                if ($compress)
81
                        header("Content-Encoding: " . $enc);
82

    
83
                echo getFileContents($cacheFile);
84
                die();
85
        }
86

    
87
        // Add core
88
        if ($core == "true") {
89
                $content .= getFileContents("tiny_mce" . $suffix . ".js");
90

    
91
                // Patch loading functions
92
                $content .= "tinyMCE_GZ.start();";
93
        }
94

    
95
        // Add core languages
96
        foreach ($languages as $lang)
97
                $content .= getFileContents("langs/" . $lang . ".js");
98

    
99
        // Add themes
100
        foreach ($themes as $theme) {
101
                $content .= getFileContents( "themes/" . $theme . "/editor_template" . $suffix . ".js");
102

    
103
                foreach ($languages as $lang)
104
                        $content .= getFileContents("themes/" . $theme . "/langs/" . $lang . ".js");
105
        }
106

    
107
        // Add plugins
108
        foreach ($plugins as $plugin) {
109
                $content .= getFileContents("plugins/" . $plugin . "/editor_plugin" . $suffix . ".js");
110

    
111
                foreach ($languages as $lang)
112
                        $content .= getFileContents("plugins/" . $plugin . "/langs/" . $lang . ".js");
113
        }
114

    
115
        // Add custom files
116
        foreach ($custom as $file)
117
                $content .= getFileContents($file);
118

    
119
        // Restore loading functions
120
        if ($core == "true")
121
                $content .= "tinyMCE_GZ.end();";
122

    
123
        // Generate GZIP'd content
124
        if ($supportsGzip) {
125
                if ($compress) {
126
                        header("Content-Encoding: " . $enc);
127
                        $cacheData = gzencode($content, 9, FORCE_GZIP);
128
                } else
129
                        $cacheData = $content;
130

    
131
                // Write gz file
132
                if ($diskCache && $cacheKey != "")
133
                        putFileContents($cacheFile, $cacheData);
134

    
135
                // Stream to client
136
                echo $cacheData;
137
        } else {
138
                // Stream uncompressed content
139
                echo $content;
140
        }
141

    
142
        /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
143

    
144
        function getParam($name, $def = false) {
145
                if (!isset($_GET[$name]))
146
                        return $def;
147

    
148
                return preg_replace("/[^0-9a-z\-_,]+/i", "", $_GET[$name]); // Remove anything but 0-9,a-z,-_
149
        }
150

    
151
        function getFileContents($path) {
152
                $path = realpath($path);
153

    
154
                if (!$path || !@is_file($path))
155
                        return "";
156

    
157
                if (function_exists("file_get_contents"))
158
                        return @file_get_contents($path);
159

    
160
                $content = "";
161
                $fp = @fopen($path, "r");
162
                if (!$fp)
163
                        return "";
164

    
165
                while (!feof($fp))
166
                        $content .= fgets($fp);
167

    
168
                fclose($fp);
169

    
170
                return $content;
171
        }
172

    
173
        function putFileContents($path, $content) {
174
                if (function_exists("file_put_contents"))
175
                        return @file_put_contents($path, $content);
176

    
177
                $fp = @fopen($path, "wb");
178
                if ($fp) {
179
                        fwrite($fp, $content);
180
                        fclose($fp);
181
                }
182
        }
183
?>
Redmine Appliance - Powered by TurnKey Linux