/**
 * tiny_mce_gzip.php
 *
 * Copyright 2010, Moxiecode Systems AB
 * Released under LGPL License.
 *
 * License: http://tinymce.moxiecode.com/license
 * Contributing: http://tinymce.moxiecode.com/contributing
 */
$frameworkPath = rtrim(dirname(dirname(dirname(dirname(__FILE__)))), DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . 'framework';
$basePath = rtrim(dirname($frameworkPath), DIRECTORY_SEPARATOR);
require_once $frameworkPath . '/core/TempPath.php';
// Handle incoming request if it's a script call
if (TinyMCE4_Compressor::getParam("js")) {
    // Default settings
    $tinyMCECompressor = new TinyMCE4_Compressor(array('cache_dir' => getTempFolder($basePath)));
    // Handle request, compress and stream to client
    $tinyMCECompressor->handleRequest();
}
/**
 * This class combines and compresses the TinyMCE core, plugins, themes and
 * language packs into one disk cached gzipped request. It improves the loading speed of TinyMCE dramatically but
 * still provides dynamic initialization.
 *
 * Example of direct usage:
 * require_once("../jscripts/tiny_mce/tiny_mce_gzip.php");
 *
 * // Renders script tag with compressed scripts
 * TinyMCE_Compressor::renderTag(array(
 *    "url" => "../jscripts/tiny_mce/tiny_mce_gzip.php",
 *    "plugins" => "pagebreak,style",
 /**
  * Generate the JavaScript that will set TinyMCE's configuration:
  * - Parse all configurations into JSON objects to be used in JavaScript
  * - Includes TinyMCE and configurations using the {@link Requirements} system
  */
 public static function require_js()
 {
     require_once TINYMCE4_PATH . '/thirdparty/tinymce/tiny_mce_gzip.php';
     $useGzip = Config::inst()->get('CustomHtmlEditorField', 'use_gzip');
     $configs = array();
     $externalPlugins = array();
     $internalPlugins = array();
     $languages = array();
     foreach (self::$configs as $configID => $config) {
         $settings = $config->settings;
         // parse plugins
         $configPlugins = array();
         foreach ($config->plugins as $plugin => $path) {
             if (!$path) {
                 $configPlugins[] = $plugin;
                 $internalPlugins[] = $plugin;
             } else {
                 $configPlugins[] = '-' . $plugin;
                 if (!array_key_exists($plugin, $externalPlugins)) {
                     $externalPlugins[$plugin] = sprintf('tinymce.PluginManager.load("%s", "%s");', $plugin, $path);
                 }
             }
         }
         // save config plugins settings
         $settings['plugins'] = implode(',', $configPlugins);
         // buttons
         foreach ($config->buttons as $i => $buttons) {
             // $settings['theme_advanced_buttons'.$i] = implode(',', $buttons); // tinymce3
             $settings['toolbar' . $i] = implode(',', $buttons);
             // tinymce4
         }
         // languages
         $languages[] = $config->getOption('language');
         // save this config settings
         $configs[$configID] = $settings;
     }
     // tinyMCE JS requirement
     if ($useGzip) {
         $tag = TinyMCE4_Compressor::renderTag(array('url' => TINYMCE4_DIR . '/thirdparty/tinymce/tiny_mce_gzip.php', 'plugins' => implode(',', $internalPlugins), 'themes' => 'advanced', 'languages' => implode(",", array_filter($languages))), true);
         preg_match('/src="([^"]*)"/', $tag, $matches);
         Requirements::javascript(html_entity_decode($matches[1]));
     } else {
         Requirements::javascript(TINYMCE4_DIR . '/thirdparty/tinymce/jquery.tinymce.min.js');
     }
     // block old scripts
     Requirements::block(MCE_ROOT . 'tiny_mce_src.js');
     Requirements::block(FRAMEWORK_DIR . "/javascript/HtmlEditorField.js");
     Requirements::block('htmlEditorConfig');
     // load replacements
     Requirements::javascript(TINYMCE4_DIR . "/javascript/HtmlEditorField.js");
     if (Member::currentUser()) {
         CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS());
     }
     // prepare external plugins js string
     $externalPlugins = array_values($externalPlugins);
     $externalPlugins = implode("\n\t", $externalPlugins);
     // tinyMCE config object and external plugings
     $configsJS = "\nif((typeof tinyMCE != 'undefined')) {\n\t{$externalPlugins}\n\tvar ssTinyMceConfig = " . Convert::raw2json($configs) . ";\n}";
     Requirements::customScript($configsJS, 'customHtmlEditorConfig');
 }