[ Index ]

PHP Cross Reference of Mambo 4.6.5

[ Variables ]     [ Functions ]     [ Classes ]     [ Constants ]     [ Statistics ]

title

Body

[close]

/mambots/editors/mostlyce/jscripts/tiny_mce/ -> tiny_mce_gzip.php (source)

   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  ?>