index.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. /**
  3. * Google minify implementation for MODX manager
  4. * @package modx
  5. * @subpackage minify
  6. */
  7. @include dirname(__DIR__) . '/config.core.php';
  8. if (!defined('MODX_CORE_PATH')) define('MODX_CORE_PATH', dirname(__DIR__) . '/core/');
  9. /* set the document_root */
  10. if(!isset($_SERVER['DOCUMENT_ROOT']) || empty($_SERVER['DOCUMENT_ROOT'])) {
  11. $_SERVER['DOCUMENT_ROOT'] = str_replace($_SERVER['PATH_INFO'], '', str_replace('\\\\', '/', $_SERVER['PATH_TRANSLATED'])) . '/';
  12. }
  13. /* include the modX class */
  14. if (!(include_once MODX_CORE_PATH . 'model/modx/modx.class.php')) {
  15. include MODX_CORE_PATH . 'error/unavailable.include.php';
  16. die('Site temporarily unavailable!');
  17. }
  18. /* create the modX object */
  19. $modx= new modX('', array(xPDO::OPT_CONN_INIT => array(xPDO::OPT_CONN_MUTABLE => true)));
  20. if (!is_object($modx) || !($modx instanceof modX)) {
  21. $errorMessage = 'MODX not installed!';
  22. include MODX_CORE_PATH . 'error/unavailable.include.php';
  23. header($_SERVER['SERVER_PROTOCOL'] . ' 503 Service Unavailable');
  24. echo "<html><title>Error 503: Site temporarily unavailable</title><body><h1>Error 503</h1><p>{$errorMessage}</p></body></html>";
  25. exit();
  26. }
  27. $modx->initialize('mgr');
  28. if (!$modx->user->hasSessionContext('mgr')) die();
  29. $modx->getCacheManager();
  30. /* minify stuff */
  31. define('MINIFY_MIN_DIR', dirname(__FILE__));
  32. /* setup minify config */
  33. $min_allowDebugFlag = (boolean)$modx->getOption('manager_js_cache_allow_debug_flag',null,true);
  34. $min_errorLogger = (boolean)$modx->getOption('manager_js_cache_debug',null,true);
  35. $min_enableBuilder = false;
  36. $min_cachePath = $modx->cacheManager->getCachePath() . 'mgr/min';
  37. if (!is_dir($min_cachePath)) {
  38. $modx->cacheManager->writeTree($min_cachePath);
  39. }
  40. $documentRoot = $modx->getOption('manager_js_document_root', null, '');
  41. $min_documentRoot = !empty($documentRoot) ? $documentRoot : $_SERVER['DOCUMENT_ROOT'];
  42. if (!empty($min_documentRoot)) {
  43. $min_documentRoot = str_replace('\\', '/', realpath($min_documentRoot));
  44. }
  45. $min_cacheFileLocking = (boolean)$modx->getOption('manager_js_cache_file_locking',null,true);
  46. $min_serveOptions['bubbleCssImports'] = false;
  47. $min_serveOptions['rewriteCssUris'] = true;
  48. $min_serveOptions['maxAge'] = (int)$modx->getOption('manager_js_cache_max_age',null,3600);
  49. $min_serveOptions['minApp']['groupsOnly'] = false;
  50. $min_serveOptions['minApp']['maxFiles'] = (int)$modx->getOption('manager_js_cache_max_files',null,50);
  51. $min_serveOptions['minApp']['allowDirs'][] = $min_documentRoot;
  52. $min_serveOptions['minifierOptions']['text/css']['virtualDirs'] = array();
  53. $min_symlinks = array();
  54. $hasVirtualManagerURL = empty($min_documentRoot) || strpos(MODX_MANAGER_PATH, $min_documentRoot) !== 0 || strpos(MODX_MANAGER_PATH, MODX_MANAGER_URL) === false || substr(MODX_MANAGER_PATH, 0, strrpos(MODX_MANAGER_PATH, MODX_MANAGER_URL)) !== $min_documentRoot;
  55. if ($hasVirtualManagerURL) {
  56. $min_serveOptions['minApp']['allowDirs'][] = MODX_MANAGER_PATH;
  57. $min_serveOptions['minApp']['virtualDirs'][MODX_MANAGER_URL] = MODX_MANAGER_PATH;
  58. }
  59. $hasVirtualAssetsURL = empty($min_documentRoot) || strpos(MODX_ASSETS_PATH, $min_documentRoot) !== 0 || strpos(MODX_ASSETS_PATH, MODX_ASSETS_URL) === false || substr(MODX_ASSETS_PATH, 0, strrpos(MODX_ASSETS_PATH, MODX_ASSETS_URL)) !== $min_documentRoot;
  60. if ($hasVirtualAssetsURL) {
  61. $min_serveOptions['minApp']['allowDirs'][] = MODX_ASSETS_PATH;
  62. $min_serveOptions['minApp']['virtualDirs'][MODX_ASSETS_URL] = MODX_ASSETS_PATH;
  63. }
  64. if (!empty($min_serveOptions['minApp']['virtualDirs'])) {
  65. $min_serveOptions['minifierOptions']['text/css']['virtualDirs'] = $min_serveOptions['minApp']['virtualDirs'];
  66. }
  67. $min_uploaderHoursBehind = 0;
  68. $min_libPath = dirname(__FILE__) . '/lib';
  69. @ini_set('zlib.output_compression', (int)$modx->getOption('manager_js_zlib_output_compression',null,0));
  70. // MODX session no longer required
  71. @session_write_close();
  72. // setup include path
  73. @set_include_path($min_libPath . PATH_SEPARATOR . get_include_path());
  74. @set_time_limit(0);
  75. require 'Minify.php';
  76. /* attempt to prevent suhosin issues */
  77. @ini_set('suhosin.get.max_value_length',4096);
  78. Minify::$uploaderHoursBehind = $min_uploaderHoursBehind;
  79. Minify::setCache(
  80. isset($min_cachePath) ? $min_cachePath : ''
  81. ,$min_cacheFileLocking
  82. );
  83. if ($min_documentRoot && (!isset($_SERVER['DOCUMENT_ROOT']) || !empty($documentRoot))) {
  84. $_SERVER['DOCUMENT_ROOT'] = $min_documentRoot;
  85. Minify::$isDocRootSet = true;
  86. }
  87. $min_serveOptions['minifierOptions']['text/css']['symlinks'] = $min_symlinks;
  88. // auto-add targets to allowDirs
  89. foreach ($min_symlinks as $uri => $target) {
  90. $min_serveOptions['minApp']['allowDirs'][] = $target;
  91. }
  92. if ($min_allowDebugFlag && isset($_GET['debug'])) {
  93. require_once 'Minify/DebugDetector.php';
  94. $min_serveOptions['debug'] = Minify_DebugDetector::shouldDebugRequest($_COOKIE, $_GET, $_SERVER['REQUEST_URI']);
  95. }
  96. if ($min_errorLogger) {
  97. require_once 'Minify/Logger.php';
  98. if (true === $min_errorLogger) {
  99. require_once 'FirePHP.php';
  100. $min_errorLogger = FirePHP::getInstance(true);
  101. }
  102. if (isset($_GET['debug'])) {
  103. Minify_Logger::setLogger($min_errorLogger);
  104. $min_serveOptions['debug'] = true;
  105. }
  106. }
  107. // check for URI versioning
  108. if (preg_match('/&\\d/', $_SERVER['QUERY_STRING'])) {
  109. $min_serveOptions['maxAge'] = 31536000;
  110. }
  111. if (isset($_GET['g'])) {
  112. // well need groups config
  113. $min_serveOptions['minApp']['groups'] = (require MINIFY_MIN_DIR . '/groupsConfig.php');
  114. }
  115. if (isset($_GET['f']) || isset($_GET['g'])) {
  116. // serve!
  117. if (! isset($min_serveController)) {
  118. require 'Minify/Controller/MinApp.php';
  119. $min_serveController = new Minify_Controller_MinApp();
  120. }
  121. Minify::serve($min_serveController, $min_serveOptions);
  122. } else {
  123. header("Location: /");
  124. exit();
  125. }