public function updateCMSFields(FieldList $fields)
 {
     Requirements::javascript(TINYMCE4_DIR . "/javascript/HtmlEditorField.js");
     Requirements::css(TINYMCE4_DIR . "/css/HtmlEditorField.css");
     if (Member::currentUser()) {
         CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS());
     }
     $fields->replaceField("Content", CustomHtmlEditorField::create("Content", _t('SiteTree.HTMLEDITORTITLE', "Content", 'HTML editor title'))->addExtraClass('stacked'));
 }
 function init()
 {
     if (Member::currentUser()) {
         CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS());
     }
     Requirements::block(MCE_ROOT . 'tiny_mce_src.js');
     Requirements::block(FRAMEWORK_DIR . "/javascript/HtmlEditorField.js");
     // Set default values in the config if missing.  These things can't be defined in the config
     // file because insufficient information exists when that is being processed
     $htmlEditorConfig = CustomHtmlEditorConfig::get_active();
     $htmlEditorConfig->setOption('language', i18n::get_tinymce_lang());
     if (!$htmlEditorConfig->getOption('content_css')) {
         $cssFiles = array();
         $cssFiles[] = FRAMEWORK_ADMIN_DIR . '/css/editor.css';
         // Use theme from the site config
         if (class_exists('SiteConfig') && ($config = SiteConfig::current_site_config()) && $config->Theme) {
             $theme = $config->Theme;
         } elseif (Config::inst()->get('SSViewer', 'theme_enabled') && Config::inst()->get('SSViewer', 'theme')) {
             $theme = Config::inst()->get('SSViewer', 'theme');
         } else {
             $theme = false;
         }
         if ($theme) {
             $cssFiles[] = THEMES_DIR . "/{$theme}/css/editor.css";
         } else {
             if (project()) {
                 $cssFiles[] = project() . '/css/editor.css';
             }
         }
         // Remove files that don't exist
         foreach ($cssFiles as $k => $cssFile) {
             if (!file_exists(BASE_PATH . '/' . $cssFile)) {
                 unset($cssFiles[$k]);
             }
         }
         $htmlEditorConfig->setOption('content_css', implode(',', $cssFiles));
     }
     CustomHtmlEditorConfig::require_js();
 }
 /**
  * Includes the JavaScript neccesary for this field to work using the {@link Requirements} system.
  */
 public static function include_js()
 {
     $configObj = CustomHtmlEditorConfig::get_active();
     // compile list of plugins
     $internalPlugins = array();
     foreach ($configObj->getPlugins() as $plugin => $path) {
         if (!$path) {
             $internalPlugins[] = $plugin;
         }
     }
     // use cachefly tinymce 4 version
     Requirements::javascript('//tinymce.cachefly.net/4/tinymce.min.js?plugins=' . implode(',', $internalPlugins) . '&themes=modern&languages=en&diskcache=true&src=false');
     Requirements::customScript($configObj->generateJS(), 'htmlEditorConfig');
     // block old scripts
     Requirements::block(MCE_ROOT . 'tiny_mce_src.js');
     Requirements::block(FRAMEWORK_DIR . "/javascript/HtmlEditorField.js");
     // load replacements
     Requirements::javascript(TINYMCE4_DIR . "/javascript/HtmlEditorField.js");
     if (Member::currentUser()) {
         CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS());
     }
 }
 /**
  * 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');
 }