?
Path : /home/admin/public_html/old/administrator/components/com_jce/models/ |
Current File : /home/admin/public_html/old/administrator/components/com_jce/models/editor.php |
<?php /** * @package JCE * @copyright Copyright (c) 2009-2015 Ryan Demmer. All rights reserved. * @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * JCE is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. */ defined('_JEXEC') or die('RESTRICTED'); wfimport('admin.classes.model'); wfimport('admin.classes.text'); wfimport('admin.helpers.xml'); wfimport('admin.helpers.extension'); wfimport('editor.libraries.classes.token'); wfimport('editor.libraries.classes.editor'); wfimport('editor.libraries.classes.language'); jimport('joomla.application.component.model'); class WFModelEditor extends WFModelBase { /** * Editor version * @var string */ public static $version = null; /** * Profile object * * @var object */ private $profile = null; /** * Array of linked scripts * * @var array */ protected $scripts = array(); /** * Array of linked style sheets * * @var array */ protected $stylesheets = array(); /** * Array of included style declarations * * @var array */ protected $styles = array(); /** * Array of scripts placed in the header * * @var array */ protected $javascript = array(); private function addScript($url) { $this->scripts[] = $url; } private function addStyleSheet($url) { $this->stylesheets[] = $url; } private function addScriptDeclaration($text) { $this->javascript[] = $text; } private function addStyleDeclaration($text) { $this->styles[] = $text; } public function __construct() { $wf = WFEditor::getInstance(); // set language $this->language = WFLanguage::getCode(); // set profile $this->profile = $wf->getProfile(); } public function buildEditor() { // get document $document = JFactory::getDocument(); // get an editor instance $wf = WFEditor::getInstance(); // create token $token = WFToken::getToken(); // get current component $option = JRequest::getCmd('option'); $component = WFExtensionHelper::getComponent(null, $option); // get default settings $settings = $this->getEditorSettings(); // set default component id $component_id = 0; $component_id = isset($component->extension_id) ? $component->extension_id : ($component->id ? $component->id : 0); $version = self::getVersion(); // settings array for jce, tinymce etc $init = array(); // if a profile is set if (is_object($this->profile)) { jimport('joomla.filesystem.folder'); $settings = array_merge($settings, array('theme' => 'advanced', 'component_id' => $component_id, 'plugins' => $this->getPlugins()), $this->getToolbar()); // Theme and skins $theme = array( 'toolbar_location' => array('top', 'top', 'string'), 'toolbar_align' => array('left', 'left', 'string'), 'statusbar_location' => array('bottom', 'bottom', 'string'), 'path' => array(1, 1, 'boolean'), 'resizing' => array(1, 0, 'boolean'), 'resize_horizontal' => array(1, 1, 'boolean'), 'resizing_use_cookie' => array(1, 1, 'boolean') ); // set rows key to pass to plugin config $settings['rows'] = $this->profile->rows; foreach ($theme as $k => $v) { $settings['theme_advanced_' . $k] = $wf->getParam('editor.' . $k, $v[0], $v[1], $v[2]); } if (!$wf->getParam('editor.use_cookies', 1)) { $settings['theme_advanced_resizing_use_cookie'] = false; } $settings['width'] = $wf->getParam('editor.width'); $settings['height'] = $wf->getParam('editor.height'); // 'Look & Feel' $skin = explode('.', $wf->getParam('editor.toolbar_theme', 'default', 'default')); $settings['skin'] = $skin[0]; $settings['skin_variant'] = isset($skin[1]) ? $skin[1] : ''; // get body class if any $body_class = $wf->getParam('editor.body_class', ''); // check for editor reset $content_reset = $wf->getParam('editor.content_style_reset', $wf->getParam('editor.highcontrast', 0)) == 1 ? 'mceContentReset' : ''; // combine body class and reset $settings['body_class'] = trim($body_class . ' ' . $content_reset); // set body id $settings['body_id'] = $wf->getParam('editor.body_id', ''); // get stylesheets $stylesheets = (array) self::getStyleSheets(); // set stylesheets as string $settings['content_css'] = implode(',', $stylesheets); // Editor Toggle $settings['toggle'] = $wf->getParam('editor.toggle', 1, 1); $settings['toggle_label'] = htmlspecialchars($wf->getParam('editor.toggle_label', '[Toggle Editor]', '[Toggle Editor]')); $settings['toggle_state'] = $wf->getParam('editor.toggle_state', 1, 1); }// end profile // check for joomla debug mode $config = JFactory::getConfig(); if (defined('JPATH_PLATFORM')) { $debug = $config->get('debug'); } else { $debug = $config->getValue('config.debug'); } $compress = array('javascript' => false, 'css' => false); // set compression states if ((int) $debug === 0) { $compress = array('javascript' => (int) $wf->getParam('editor.compress_javascript', 1), 'css' => (int) $wf->getParam('editor.compress_css', 1)); } // set compression if ($compress['css']) { $this->addStyleSheet(JURI::base(true) . '/index.php?option=com_jce&view=editor&layout=editor&task=pack&type=css&component_id=' . $component_id . '&' . $token . '=1'); } else { // CSS $this->addStyleSheet($this->getURL(true) . '/libraries/css/editor.css'); // get plugin styles $this->getPluginStyles($settings); } // set compression if ($compress['javascript']) { $this->addScript(JURI::base(true) . '/index.php?option=com_jce&view=editor&layout=editor&task=pack&component_id=' . $component_id . '&' . $token . '=1'); } else { $this->addScript($this->getURL(true) . '/tiny_mce/tiny_mce.js'); // Editor $this->addScript($this->getURL(true) . '/libraries/js/editor.js'); if (array_key_exists('language_load', $settings)) { // language $this->addScript(JURI::base(true) . '/index.php?option=com_jce&view=editor&layout=editor&task=loadlanguages&lang=' . $this->language . '&component_id=' . $component_id . '&' . $token . '=1'); } } // Get all optional plugin configuration options $this->getPluginConfig($settings); // remove 'rows' key from $settings unset($settings['rows']); // pass compresison states to settings $settings['compress'] = json_encode($compress); //Other - user specified $userParams = $wf->getParam('editor.custom_config', ''); $baseParams = array('mode', 'cleanup_callback', 'save_callback', 'file_browser_callback', 'urlconverter_callback', 'onpageload', 'oninit', 'editor_selector'); if ($userParams) { $userParams = explode(';', $userParams); foreach ($userParams as $userParam) { $keys = explode(':', $userParam); if (!in_array(trim($keys[0]), $baseParams)) { $settings[trim($keys[0])] = count($keys) > 1 ? trim($keys[1]) : ''; } } } // check for language files $this->checkLanguages($settings); $output = ""; $i = 1; foreach ($settings as $k => $v) { // If the value is an array, implode! if (is_array($v)) { $v = ltrim(implode(',', $v), ','); } // Value must be set if ($v !== '') { // objects or arrays or functions or regular expression if (preg_match('/(\[[^\]*]\]|\{[^\}]*\}|function\([^\}]*\}|^#(.*)#$)/', $v)) { // replace hash delimiters with / for javascript regular expression $v = preg_replace('@^#(.*)#$@', '/$1/', $v); } // boolean else if (is_bool($v) === true) { $v = $v ? 'true' : 'false'; } // stringified booleans else if ($v === "true" || $v === "false") { $v = $v === "true" ? 'true' : 'false'; } // anything that is not solely an integer else if (!is_numeric($v)) { if (strpos($v, '"') === 0) { $v = '"' . trim($v, '"') . '"'; } else { $v = '"' . str_replace('"', '\"', $v) . '"'; } } $output .= "\t\t\t" . $k . ": " . $v . ""; if ($i < count($settings)) { $output .= ",\n"; } } // Must have 3 rows, even if 2 are blank! if (preg_match('/theme_advanced_buttons([1-3])/', $k) && $v == '') { $output .= "\t\t\t" . $k . ": \"\""; if ($i < count($settings)) { $output .= ",\n"; } } $i++; } $tinymce = "{\n"; $tinymce .= preg_replace('/,?\n?$/', '', $output) . " }"; $init[] = $tinymce; $this->addScriptDeclaration("\n\t\ttry{WFEditor.init(" . implode(',', $init) . ");}catch(e){console.debug(e);}\n"); if (is_object($this->profile)) { if ($wf->getParam('editor.callback_file')) { $this->addScript(JURI::root(true) . '/' . $wf->getParam('editor.callback_file')); } // add callback file if exists if (is_file(JPATH_SITE . '/media/jce/js/editor.js')) { $this->addScript(JURI::root(true) . '/media/jce/js/editor.js'); } // add custom editor.css if exists if (is_file(JPATH_SITE . '/media/jce/css/editor.css')) { $this->addStyleSheet(JURI::root(true) . '/media/jce/css/editor.css'); } } return $this->getOutput(); } private function getOutput() { $document = JFactory::getDocument(); $end = $document->_getLineEnd(); $tab = $document->_getTab(); $version = self::getVersion(); $output = ''; foreach ($this->stylesheets as $stylesheet) { // don't add hash to dynamic php url if (strpos($stylesheet, 'index.php') === false) { $version = md5(basename($stylesheet) . $version); if (strpos($stylesheet, '?') === false) { $stylesheet .= '?' . $version; } else { $stylesheet .= '&' . $version; } } $output .= $tab . '<link rel="stylesheet" href="' . $stylesheet . '" type="text/css" />' . $end; } foreach ($this->scripts as $script) { // don't add hash to dynamic php url if (strpos($script, 'index.php') === false) { $version = md5(basename($script) . $version); if (strpos($script, '?') === false) { $script .= '?' . $version; } else { $script .= '&' . $version; } } $output .= $tab . '<script data-cfasync="false" type="text/javascript" src="' . $script . '"></script>' . $end; } foreach ($this->javascript as $script) { $output .= $tab . '<script data-cfasync="false" type="text/javascript">' . $script . '</script>' . $end; } foreach ($this->styles as $style) { $output .= $tab . '<style type="text/css">' . $style . '</style>' . $end; } return $output; } /** * Check the current language pack exists and is complete * @param array $settings Settings array * @return void */ private function checkLanguages(&$settings) { $plugins = array(); $language = $settings['language']; // only if languages are loaded and not english if (array_key_exists('language_load', $settings) === false && $language != 'en') { jimport('joomla.filesystem.file'); // check main languages and reset to english if (!JFile::exists(WF_EDITOR . '/tiny_mce/langs/' . $language . '.js') || !JFile::exists(WF_EDITOR_THEMES . '/advanced/langs/' . $language . '.js')) { $settings['language'] = 'en'; return; } foreach ((array) $settings['plugins'] as $plugin) { $path = WF_EDITOR_PLUGINS . '/' . $plugin; // if english file exists then the installed language file should too if (JFile::exists($path . '/langs/en.js') && !JFile::exists($path . '/langs/' . $language . '.js')) { $plugins[] = $plugin; } } } $settings['skip_plugin_languages'] = $plugins; } /** * Get the current version from the editor manifest * @return Version */ private static function getVersion() { if (!isset(self::$version)) { $xml = WFXMLHelper::parseInstallManifest(JPATH_ADMINISTRATOR . '/components/com_jce/jce.xml'); // return cleaned version number or date self::$version = preg_replace('/[^0-9a-z]/i', '', $xml['version']); if (!self::$version) { self::$version = date('Y-m-d', strtotime('today')); } } return self::$version; } /** * Get default settings array * @return array */ public function getEditorSettings() { wfimport('editor.libraries.classes.token'); $wf = WFEditor::getInstance(); $language = JFactory::getLanguage(); $settings = array( 'token' => WFToken::getToken(), 'etag' => md5($this->getVersion()), 'base_url' => JURI::root(), 'language' => $this->language, //'language_load' => false, 'directionality' => $language->isRTL() ? 'rtl' : 'ltr', 'theme' => 'none', 'plugins' => '' ); $settings['language_load'] = false; return $settings; } /** * Return a list of icons for each JCE editor row * * @access public * @param string The number of rows * @return The row array */ private function getToolbar() { wfimport('admin.models.plugins'); $model = new WFModelPlugins(); $wf = WFEditor::getInstance(); $rows = array('theme_advanced_buttons1' => '', 'theme_advanced_buttons2' => '', 'theme_advanced_buttons3' => ''); // we need a profile object and some defined rows if (!is_object($this->profile) || empty($this->profile->rows)) { return $rows; } // get plugins $plugins = $model->getPlugins(); // get core commands $commands = $model->getCommands(); // merge plugins and commands $icons = array_merge($commands, $plugins); // create an array of rows $lists = explode(';', $this->profile->rows); // backwards compatability map $map = array( 'paste' => 'clipboard', 'spacer' => '|', 'forecolor' => 'fontcolor', 'backcolor' => 'backcolor' ); $x = 0; for ($i = 1; $i <= count($lists); $i++) { $buttons = array(); $items = explode(',', $lists[$x]); foreach ($items as $item) { // set the plugin/command name $name = $item; // map legacy values etc. if (array_key_exists($item, $map)) { $item = $map[$item]; } // check if button should be in toolbar if ($item !== "|") { if (array_key_exists($item, $icons) === false) { continue; } // assign icon $item = $icons[$item]->icon; } // check for custom plugin buttons if (array_key_exists($name, $plugins)) { $custom = $wf->getParam($name . '.buttons'); if (!empty($custom)) { $custom = array_filter((array) $custom); if (empty($custom)) { $item = ""; } else { $a = array(); foreach (explode(',', $item) as $s) { if (in_array($s, $custom) || $s == "|") { $a[] = $s; } } $item = implode(',', $a); // remove leading or trailing | $item = trim($item, '|'); } } } if (!empty($item)) { // remove double | $item = preg_replace('#(\|,)+#', '|,', $item); $buttons[] = $item; } } if (!empty($buttons)) { $rows['theme_advanced_buttons' . $i] = implode(',', $buttons); } $x++; } return $rows; } /** * Return a list of published JCE plugins * * @access public * @return string list */ public function getPlugins() { jimport('joomla.filesystem.file'); static $plugins; if (is_object($this->profile)) { if (!is_array($plugins)) { $wf = WFEditor::getInstance(); $plugins = explode(',', $this->profile->plugins); $core = array('autolink', 'cleanup', 'core', 'code', 'colorpicker', 'upload', 'format'); $plugins = array_unique(array_merge($core, $plugins)); // add formatselect if (in_array('formatselect', $plugins) === false && strpos($this->profile->rows, 'formatselect') !== false) { $plugins[] = 'formatselect'; } // add styleselect if (in_array('styleselect', $plugins) === false && strpos($this->profile->rows, 'styleselect') !== false) { $plugins[] = 'styleselect'; } // add fontselect if (in_array('fontselect', $plugins) === false && strpos($this->profile->rows, 'fontselect') !== false) { $plugins[] = 'fontselect'; } // add formatselect if (in_array('fontsizeselect', $plugins) === false && strpos($this->profile->rows, 'fontsizeselect') !== false) { $plugins[] = 'fontsizeselect'; } // add font colours if (in_array('fontcolor', $plugins) === false && preg_match('#(forecolor|backcolor)#', $this->profile->rows)) { $plugins[] = 'fontcolor'; } // add importcss if (in_array('styleselect', $plugins) || in_array('fontselect', $plugins)) { $plugins[] = 'importcss'; } // add advlists plugin if lists are loaded if (in_array('lists', $plugins)) { $plugins[] = 'advlist'; } // Load wordcount if path is enabled if ($wf->getParam('editor.path', 1)) { $plugins[] = 'wordcount'; } // add legacy "charmap" if (in_array('charmap', $plugins) === false && strpos($this->profile->rows, 'charmap') !== true) { $plugins[] = 'charmap'; } foreach ($plugins as $k => $v) { if (in_array($v, $core)) { continue; } // check plugin is correctly installed and is a tinymce plugin, ie: it has an editor_plugin.js file if (!JFile::exists(WF_EDITOR_PLUGINS . '/' . $v . '/editor_plugin.js')) { unset($plugins[$k]); } } // remove empty values $plugins = array_filter($plugins); } } return $plugins; } /** * Get all loaded plugins config options * * @access public * @param array $settings passed by reference */ private function getPluginConfig(&$settings) { $plugins = $settings['plugins']; if ($plugins && is_array($plugins)) { foreach ($plugins as $plugin) { $file = WF_EDITOR_PLUGINS . '/' . $plugin . '/classes/config.php'; if (file_exists($file)) { require_once ($file); // Create class name $classname = 'WF' . ucfirst($plugin) . 'PluginConfig'; // Check class and method if (class_exists($classname) && method_exists($classname, 'getConfig')) { call_user_func_array(array($classname, 'getConfig'), array(&$settings)); } } } } } /** * Get all loaded plugins styles * * @access public * @param array $settings passed by reference */ private function getPluginStyles($settings) { $plugins = $settings['plugins']; if ($plugins && is_array($plugins)) { foreach ($plugins as $plugin) { $file = WF_EDITOR_PLUGINS . '/' . $plugin . '/classes/config.php'; if (file_exists($file)) { require_once ($file); // Create class name $classname = 'WF' . ucfirst($plugin) . 'PluginConfig'; // Check class and method if (class_exists($classname) && method_exists($classname, 'getStyles')) { call_user_func(array($classname, 'getStyles')); } } } } } /** * Remove keys from an array * * @return $array by reference * @param arrau $array Array to edit * @param array $keys Keys to remove */ public function removeKeys(&$array, $keys) { if (!is_array($keys)) { $keys = array($keys); } $array = array_diff($array, $keys); } /** * Add keys to an array * * @return The string list with added key or the key * @param string The array * @param string The keys to add */ public function addKeys(&$array, $keys) { if (!is_array($keys)) { $keys = array($keys); } $array = array_unique(array_merge($array, $keys)); } /** * Get a list of editor font families * * @return string font family list * @param string $add Font family to add * @param string $remove Font family to remove * * Deprecated in 2.3.4 */ public function getEditorFonts() { return ""; } /** * Return the current site template name * * @access public */ private static function getSiteTemplates() { $db = JFactory::getDBO(); $app = JFactory::getApplication(); $id = 0; if ($app->isSite()) { $menus = $app->getMenu(); $menu = $menus->getActive(); if ($menu) { $id = isset($menu->template_style_id) ? $menu->template_style_id : $menu->id; } } $query = $db->getQuery(true); if (is_object($query)) { $query->select('id, template')->from('#__template_styles')->where(array("client_id = 0", "home = '1'")); } else { $query = 'SELECT menuid as id, template' . ' FROM #__templates_menu' . ' WHERE client_id = 0'; } $db->setQuery($query); $templates = $db->loadObjectList(); $assigned = array(); foreach ($templates as $template) { if ($id == $template->id) { array_unshift($assigned, $template->template); } else { $assigned[] = $template->template; } } // return templates return $assigned; } private static function getYoothemePath($template) { $warp7 = JPATH_SITE . '/templates/' . $template . '/warp.php'; if (is_file($warp7)) { // get warp $warp = require($warp7); $layouts = $warp['config']->get('layouts'); $style = $layouts['default']['style']; if (!empty($style)) { return "templates/" . $template . "/styles/" . $style . "/css"; } } return "templates/" . $template . "/css"; } private static function getStyleSheetsList($absolute = false) { jimport('joomla.filesystem.folder'); jimport('joomla.filesystem.file'); // use system template as default $url = 'templates/system/css'; // use 'system' as default $template = 'system'; // use system editor.css as default $styles = 'templates/system/css/editor.css'; // stylesheets $stylesheets = array(); // files $files = array(); // get templates $templates = self::getSiteTemplates(); foreach ($templates as $item) { // Template CSS $path = JPATH_SITE . '/templates/' . $item; // get the first path that exists if (is_dir($path)) { // assign template $template = $item; if (substr($template, 0, 4) === "yoo_") { $url = self::getYoothemePath($template); $path = JPATH_SITE . '/' . $url; } else { // assign url $url = "templates/" . $template . "/css"; } break; } } wfimport('editor.libraries.classes.editor'); $wf = WFEditor::getInstance(); $global = intval($wf->getParam('editor.content_css', 1)); $profile = intval($wf->getParam('editor.profile_content_css', 2)); switch ($global) { // Custom template css files case 0 : // use getParam so result is cleaned $global_custom = $wf->getParam('editor.content_css_custom', ''); // Replace $template variable with site template name $global_custom = str_replace('$template', $template, $global_custom); foreach (explode(',', $global_custom) as $tmp) { $file = JPATH_SITE . '/' . $tmp; $list = array(); // check if path is a file if (is_file($file)) { $list[] = $file; // find files using pattern } else { $list = glob($file); } if (!empty($list)) { foreach ($list as $item) { if (is_file($item) && preg_match('#\.(css|less)$#', $item)) { $files[] = substr($item, strlen(JPATH_SITE) + 1); } } } } break; // Template css (template.css or template_css.css) case 1 : // Joomla! 1.5 standard $file = 'template.css'; $css = array(); if (JFolder::exists($path)) { $css = JFolder::files($path, '(base|core|theme|template|template_css)\.(css|less)$', false, true); } if (!empty($css)) { // use the first result $file = $css[0]; } // check for php version if (JFile::exists($file . '.php')) { $file = $file . '.php'; } $files[] = $url . '/' . basename($file); break; // Nothing, use system default case 2 : $files[] = 'templates/system/css/editor.css'; break; } switch ($profile) { // add to global config value case 0 : case 1 : $profile_custom = $wf->getParam('editor.profile_content_css_custom', ''); // Replace $template variable with site template name (defaults to 'system') $profile_custom = str_replace('$template', $template, $profile_custom); $custom = array(); foreach (explode(',', $profile_custom) as $tmp) { $file = JPATH_SITE . '/' . $tmp; $list = array(); // check if path is a file if (is_file($file)) { $list[] = $file; // find files using pattern } else { $list = glob($file); } if (!empty($list)) { foreach ($list as $item) { if (is_file($item) && preg_match('#\.(css|less)$#', $item)) { $custom[] = substr($item, strlen(JPATH_SITE) + 1); } } } } // add to existing list if ($profile === 0) { $files = array_merge($files, $custom); // overwrite global config value } else { $files = (array) $custom; } break; // inherit global config value case 2 : break; } // remove duplicates $files = array_unique($files); // get the root directory $root = $absolute ? JPATH_SITE : JURI::root(true); // check for existence of each file and make array of stylesheets foreach ($files as $file) { if (empty($file)) { continue; } // remove leading slash $file = ltrim($file, '/'); if (JFile::exists(JPATH_SITE . '/' . $file)) { $etag = ""; // add etag if ($absolute === false) { // create hash $etag = '?' . md5_file(JPATH_SITE . '/' . $file); } $stylesheets[] = $root . '/' . $file . $etag; } } // remove duplicates $stylesheets = array_unique($stylesheets); return $stylesheets; } /** * Get an array of stylesheets used by the editor. * References the WFEditor class. * If the list contains any LESS stylesheets, the list is returned as a URL to compile * @return string */ public static function getStyleSheets() { $stylesheets = self::getStyleSheetsList(); // check for less files in the array $less = preg_grep('#\.less$#', $stylesheets); // process less files etc. if (!empty($less)) { // create token $token = WFToken::getToken(); $version = self::getVersion(); return JURI::base(true) . '/index.php?option=com_jce&view=editor&layout=editor&task=compileless&' . $token . '=1'; } return $stylesheets; } /** * Get the URL of the editor * @param boolean $relative * @return string */ private function getURL($relative = false) { if ($relative) { return JURI::root(true) . '/components/com_jce/editor'; } return JURI::root() . 'components/com_jce/editor'; } /** * Pack / compress editor files */ public function pack() { // check token WFToken::checkToken('GET') or die('RESTRICTED'); wfimport('admin.classes.packer'); wfimport('admin.classes.language'); $wf = WFEditor::getInstance(); $type = JRequest::getWord('type', 'javascript'); // javascript $packer = new WFPacker(array('type' => $type)); $themes = 'none'; $plugins = array(); $suffix = JRequest::getWord('suffix', ''); $component_id = JRequest::getInt('component_id', 0); // if a profile is set if ($this->profile) { $themes = 'advanced'; $plugins = $this->getPlugins(); } $themes = explode(',', $themes); // toolbar theme $toolbar = explode('.', $wf->getParam('editor.toolbar_theme', 'default')); switch ($type) { case 'language' : $files = array(); $data = $this->loadLanguages(array(), array(), '(^dlg$|_dlg$)', true); $packer->setText($data); break; case 'javascript' : $files = array(); // add core file $files[] = WF_EDITOR . "/tiny_mce/tiny_mce" . $suffix . ".js"; // Add themes in dev mode if (!self::$version) { foreach ($themes as $theme) { $files[] = WF_EDITOR . "/tiny_mce/themes/" . $theme . "/editor_template" . $suffix . ".js"; } } $core = array('autolink', 'cleanup', 'core', 'code', 'colorpicker', 'upload', 'format'); // Add plugins foreach ($plugins as $plugin) { // skip core plugins in production mode if (self::$version && in_array($plugin, $core)) { continue; } $files[] = WF_EDITOR . "/tiny_mce/plugins/" . $plugin . "/editor_plugin" . $suffix . ".js"; } // add Editor file $files[] = WF_EDITOR . '/libraries/js/editor.js'; // parse ini language files $parser = new WFLanguageParser(); $data = $parser->load(); // add to packer $packer->setContentEnd($data); break; case 'css' : $context = JRequest::getWord('context', 'editor'); if ($context == 'content') { $files = array(); $files[] = WF_EDITOR_THEMES . '/' . $themes[0] . '/skins/' . $toolbar[0] . '/content.css'; // get template stylesheets $styles = self::getStyleSheetsList(true); foreach ($styles as $style) { if (JFile::exists($style)) { $files[] = $style; } } // load content styles dor each plugin if they exist foreach ($plugins as $plugin) { $content = WF_EDITOR_PLUGINS . '/' . $plugin . '/css/content.css'; if (JFile::exists($content)) { $files[] = $content; } } } else { $files = array(); $files[] = WF_EDITOR_LIBRARIES . '/css/editor.css'; $dialog = $wf->getParam('editor.dialog_theme', 'jce'); $files[] = WF_EDITOR_THEMES . '/' . $themes[0] . '/skins/' . $toolbar[0] . '/ui.css'; if (isset($toolbar[1])) { $files[] = WF_EDITOR_THEMES . '/' . $themes[0] . '/skins/' . $toolbar[0] . '/ui_' . $toolbar[1] . '.css'; } // get external styles from config class for each plugin foreach ($plugins as $plugin) { $class = WF_EDITOR_PLUGINS . '/' . $plugin . '/classes/config.php'; if (JFile::exists($class)) { require_once ($class); $classname = 'WF' . ucfirst($plugin) . 'PluginConfig'; if (class_exists($classname) && method_exists(new $classname, 'getStyles')) { $files = array_merge($files, (array) call_user_func(array($classname, 'getStyles'))); } } } } break; } $packer->setFiles($files); $packer->pack(); } public function loadLanguages() { // check token WFToken::checkToken('GET') or die('RESTRICTED'); wfimport('admin.classes.language'); $parser = new WFLanguageParser(array('plugins' => $this->getPlugins())); $data = $parser->load(); $parser->output($data); } public function compileLess() { // check token WFToken::checkToken('GET') or die('RESTRICTED'); wfimport('admin.classes.packer'); $wf = WFEditor::getInstance(); $files = self::getStyleSheetsList(true); if (!empty($files)) { $packer = new WFPacker(array('files' => $files, 'type' => 'css')); $packer->pack(false); } } public function getToken($id) { return '<input type="hidden" id="wf_' . $id . '_token" name="' . WFToken::getToken() . '" value="1" />'; } } ?>