/plugins/editors/jce/libraries/classes/editor.php
PHP | 670 lines | 373 code | 40 blank | 257 comment | 47 complexity | 155b2dff8ba1ecbe08103acf64ce1570 MD5 | raw file
- <?php
- /**
- * @version $Id: editor.php 109 2009-06-21 19:24:41Z happynoodleboy $
- * @package JCE
- * @copyright Copyright (C) 2005 - 2009 Ryan Demmer. All rights reserved.
- * @author Ryan Demmer
- * @license GNU/GPL
- * 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 access');
-
- /**
- * JCE class
- *
- * @static
- * @package JCE
- * @since 1.5
- */
-
- class JContentEditor extends JObject
- {
- /*
- * @var varchar
- */
- var $version = '1.5.6';
- /*
- * @var varchar
- */
- var $site_url = null;
- /*
- * @var varchar
- */
- var $group = null;
- /*
- * @var object
- */
- var $params = null;
- /*
- * @var array
- */
- var $plugins = array();
- /*
- * @var varchar
- */
- var $url = array();
- /*
- * @var varchar
- */
- var $request = null;
- /*
- * @var array
- */
- var $scripts = array();
- /*
- * @var array
- */
- var $css = array();
- /*
- * @var boolean
- */
- var $_debug = false;
- /**
- * Constructor activating the default information of the class
- *
- * @access protected
- */
- function __construct($config = array())
- {
- global $mainframe;
-
- $this->setProperties($config);
-
- // Get user group
- $this->group = $this->getUserGroup();
- // Get editor and group params
- $this->params = $this->getEditorParams();
- }
- /**
- * Returns a reference to a editor object
- *
- * This method must be invoked as:
- * <pre> $browser = &JContentEditor::getInstance();</pre>
- *
- * @access public
- * @return JCE The editor object.
- * @since 1.5
- */
- function &getInstance()
- {
- static $instance;
-
- if (!is_object($instance)) {
- $instance = new JContentEditor();
- }
- return $instance;
- }
- /**
- * Get the current version
- * @return Version
- */
- function getVersion()
- {
- // remove dots and return version
- return str_replace('.', '', $this->version);
- }
- /**
- * Get the current users group if any
- *
- * @access public
- * @return group or false
- */
- function getUserGroup()
- {
- $db =& JFactory::getDBO();
- $user =& JFactory::getUser();
- $option = JRequest::getCmd('option');
-
- if ($this->group) {
- return $this->group;
- }
- $query = 'SELECT *'
- . ' FROM #__jce_groups'
- . ' WHERE published = 1'
- . ' ORDER BY ordering ASC'
- ;
- $db->setQuery($query);
- $groups = $db->loadObjectList();
-
- foreach ($groups as $group) {
- $components = ($option == 'com_jce') ? true : in_array($option, explode(',', $group->components));
-
- // Check user
- if (in_array($user->id, explode(',', $group->users))) {
- // Check components
- if ($group->components) {
- if ($components) {
- return $group;
- }
- }else{
- return $group;
- }
- }
- // Check usertype
- if (in_array($user->gid, explode(',', $group->types))) {
- // Check components
- if ($group->components) {
- if ($components) {
- return $group;
- }
- }else{
- return $group;
- }
- }
- // Check components only
- if ($group->components && $components) {
- return $group;
- }
- }
- return null;
- }
- /**
- * Get the Super Administrator status
- *
- * Determine whether the user is a Super Administrator
- *
- * @return boolean
- */
- function isSuperAdmin()
- {
- $user =& JFactory::getUser();
- return (strtolower($user->usertype) == 'superadministrator' || strtolower($user->usertype) == 'super administrator' || $user->gid == 25) ? true : false;
- }
- /**
- * Filter (remove) a parameter from a parameter string
- * @return string Filtered parameter String
- * @param object $params
- * @param object $key
- */
- function filterParams($params, $key)
- {
- $params = explode("\n", $params);
- $return = array();
-
- foreach($params as $param) {
- if (preg_match('/'.$key.'/i', $param)) {
- $return[] = $param;
- }
- }
- return implode("\n", $return);
- }
- /**
- * Return the JCE Editor's parameters
- *
- * @return object
- */
- function getEditorParams()
- {
- $db =& JFactory::getDBO();
-
- if (isset($this->params)) {
- return $this->params;
- }
-
- $e_params = '';
- $g_params = '';
-
- $query = 'SELECT params FROM #__plugins'
- . ' WHERE element = '. $db->Quote('jce')
- . ' AND folder = '. $db->Quote('editors')
- . ' AND published = 1'
- . ' LIMIT 1'
- ;
- $db->setQuery($query);
-
- $e_params = $db->loadResult();
- // check if group params available
- if ($this->group) {
- $g_params = $this->filterParams($this->group->params, 'editor');
- }
-
- return new JParameter($e_params . $g_params);
- }
- /**
- * Get an Editor Parameter by key
- *
- * @return string Editor Parameter
- * @param string $key The parameter key
- * @param string $default[optional] Value if no result
- */
- function getEditorParam($key, $default = '', $fallback = '')
- {
- $params = $this->getEditorParams();
- return $this->getParam($params, $key, $default, $fallback);
- }
- /**
- * Return the plugin parameter object
- *
- * @access public
- * @param string The plugin
- * @return The parameter object
- */
- function getPluginParams($plugin)
- {
- $params = '';
- if ($this->group) {
- $params = $this->filterParams($this->group->params, $plugin);
- }
- return new JParameter($params);
- }
- /**
- * Get a group parameter from plugin and/or editor parameters
- *
- * @access public
- * @param string The parameter name
- * @param string The default value
- * @return string
- */
- function getSharedParam($plugin, $param, $default = '')
- {
- $e_params = $this->getEditorParams();
- $p_params = $this->getPluginParams($plugin);
-
- $ret = $p_params->get($plugin . '_' . $param, '');
-
- if ($ret == '') {
- $ret = $e_params->get('editor_' . $param, $default);
- }
- return $this->cleanParam($ret);
- }
- /**
- * Add a plugin to the plugins array
- *
- * @return null
- * @param array $plugins
- */
- function addPlugins($plugins)
- {
- $plugins = (array) $plugins;
- $this->plugins = array_unique(array_merge($this->plugins, $plugins));
- }
- /**
- * Return a list of published JCE plugins
- *
- * @access public
- * @return string list
- */
- function getPlugins()
- {
- $db =& JFactory::getDBO();
-
- $plugins = array();
-
- if ($this->group) {
- $query = "SELECT name"
- . " FROM #__jce_plugins"
- . " WHERE published = 1"
- . " AND type = 'plugin'"
- . " AND id IN (". $this->group->plugins. ")"
- ;
-
- $db->setQuery($query);
- $plugins = $db->loadResultArray();
- }
- return array_merge($plugins, $this->plugins);
- }
- /**
- * 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
- */
- function getEditorFonts($add, $remove)
- {
-
- $add = explode(';', $this->getEditorParam('editor_theme_advanced_fonts_add', ''));
- $remove = preg_split('/[;,]+/', $this->getEditorParam('editor_theme_advanced_fonts_remove', ''));
-
- // Default font list
- $fonts = array(
- 'Andale Mono=andale mono,times',
- 'Arial=arial,helvetica,sans-serif',
- 'Arial Black=arial black,avant garde',
- 'Book Antiqua=book antiqua,palatino',
- 'Comic Sans MS=comic sans ms,sans-serif',
- 'Courier New=courier new,courier',
- 'Georgia=georgia,palatino',
- 'Helvetica=helvetica',
- 'Impact=impact,chicago',
- 'Symbol=symbol',
- 'Tahoma=tahoma,arial,helvetica,sans-serif',
- 'Terminal=terminal,monaco',
- 'Times New Roman=times new roman,times',
- 'Trebuchet MS=trebuchet ms,geneva',
- 'Verdana=verdana,geneva',
- 'Webdings=webdings',
- 'Wingdings=wingdings,zapf dingbats'
- );
-
- if (count($remove)) {
- foreach($fonts as $key => $value) {
- foreach($remove as $gone) {
- if ($gone) {
- if (preg_match('/^'. $gone .'=/i', $value)) {
- // Remove family
- unset($fonts[$key]);
- }
- }
- }
- }
- }
- foreach($add as $new) {
- // Add new font family
- if (preg_match('/([^\=]+)(\=)([^\=]+)/', trim($new)) && !in_array($new, $fonts)) {
- $fonts[] = $new;
- }
- }
- natcasesort($fonts);
- return implode(';', $fonts);
- }
- /**
- * Return the curernt language code
- *
- * @access public
- * @return language code
- */
- function getLanguageDir()
- {
- $language =& JFactory::getLanguage();
- return $language->isRTL() ? 'rtl' : 'ltr';
- }
- /**
- * Return the curernt language code
- *
- * @access public
- * @return language code
- */
- function getLanguageTag()
- {
- $language =& JFactory::getLanguage();
- if ($language->isRTL()) {
- return 'en-GB';
- }
- return $language->getTag();
- }
- /**
- * Return the curernt language code
- *
- * @access public
- * @return language code
- */
- function getLanguage()
- {
- $tag = $this->getLanguageTag();
- if (file_exists(JPATH_SITE .DS. 'language' .DS. $tag .DS. $tag .'.com_jce.xml')) {
- return substr($tag, 0, strpos($tag, '-'));
- }
- return 'en';
- }
- /**
- * Load a language file
- *
- * @param string $prefix Language prefix
- * @param object $path[optional] Base path
- */
- function loadLanguage($prefix, $path = JPATH_SITE)
- {
- $language =& JFactory::getLanguage();
- $language->load($prefix, $path);
- }
- /**
- * Return the current site template name
- *
- * @access public
- */
- function getSiteTemplate()
- {
- $db =& JFactory::getDBO();
-
- $query = 'SELECT template'
- . ' FROM #__templates_menu'
- . ' WHERE client_id = 0'
- . ' AND menuid = 0'
- ;
-
- $db->setQuery($query);
-
- return $db->loadResult();
- }
- function getSkin()
- {
- return $this->params->get('editor_inlinepopups_skin', 'clearlooks2');
- }
- /**
- * Remove keys from an array
- *
- * @return $array by reference
- * @param arrau $array Array to edit
- * @param array $keys Keys to remove
- */
- 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
- */
- function addKeys(&$array, $keys)
- {
- if (!is_array($keys)) {
- $keys = array($keys);
- }
- $array = array_unique(array_merge($array, $keys));
- }
- /**
- * Remove linebreaks and carriage returns from a parameter value
- *
- * @return The modified value
- * @param string The parameter value
- */
- function cleanParam($param)
- {
- return trim(preg_replace('/\n|\r|\t(\r\n)[\s]+/', '', $param));
- }
- /**
- * Get a JCE editor or plugin parameter
- *
- * @param object The parameter object
- * @param string The parameter object key
- * @param string The parameter default value
- * @param string The parameter default value
- * @access public
- * @return The parameter
- */
- function getParam($params, $key, $p, $t = '')
- {
- $v = JContentEditor::cleanParam($params->get($key, $p));
- return ($v == $t) ? '' : $v;
- }
- /**
- * Return a string of JCE Commands to be removed
- *
- * @access public
- * @return The string list
- */
- function getRemovePlugins()
- {
- $db =& JFactory::getDBO();
-
- $query = "SELECT name"
- . "\n FROM #__jce_plugins"
- . "\n WHERE type = 'command'"
- . "\n AND published = 0"
- ;
-
- $db->setQuery($query);
-
- $remove = $db->loadResultArray();
- if ($remove) {
- return implode(',', $remove);
- }else{
- return '';
- }
- }
- /**
- * Return a list of icons for each JCE editor row
- *
- * @access public
- * @param string The number of rows
- * @return The row array
- */
- function getRows()
- {
- $db =& JFactory::getDBO();
-
- $rows = array();
- if ($this->group) {
- // Get all plugins that are in the group rows list
- $query = "SELECT id, icon"
- . " FROM #__jce_plugins"
- . " WHERE published = 1"
- . " AND id IN (". str_replace(';', ',', $this->group->rows) .")"
- ;
-
- $db->setQuery($query);
-
- $icons = $db->loadObjectList();
- $lists = explode(';', $this->group->rows);
-
- if ($icons) {
- for($i=1; $i<=count($lists); $i++) {
- $x = $i - 1;
- $items = explode(',', $lists[$x]);
- $result = array();
- // I'm sure you can use array_walk for this but I just can't figure out how!
- foreach($items as $item) {
- // Add support for spacer
- if ($item == '00') {
- $result[] = '|';
- }else{
- foreach($icons as $icon) {
- if ($icon->id == $item) {
- $result[] = $icon->icon;
- }
- }
- }
- }
- $rows[$i] = implode(',', $result);
- }
- }
- }else{
- $num = intval($this->params->get('editor_layout_rows', '5'));
- for($i=1; $i<=$num; $i++) {
- $query = "SELECT icon"
- . " FROM #__jce_plugins"
- . " WHERE published = 1"
- . " AND row = ".$i
- . " ORDER BY ordering ASC"
- ;
-
- $db->setQuery($query);
-
- $result = $db->loadResultArray();
- if ($result) {
- $rows[$i] = implode(',', $result);
- }
- }
- }
- return $rows;
- }
- /**
- * Determine whether a plugin or command is loaded
- *
- * @access public
- * @param string The plugin
- * @return boolean
- */
- function isLoaded($plugin)
- {
- $db =& JFactory::getDBO();
-
- $query = 'SELECT count(id)'
- . ' FROM #__jce_plugins'
- . ' WHERE name = '. $db->Quote($plugin)
- . ' AND published = 1'
- . ' AND id IN ('. str_replace(';', ',', $this->group->rows) .')'
- ;
-
- $db->setQuery($query);
- return $db->loadResult() ? true : false;
- }
- /**
- * Get all loaded plugins config options
- *
- * @access public
- * @param array vars passed by reference
- */
- function getPluginConfig(&$vars)
- {
- // Store path
- $path = JPATH_PLUGINS .DS. 'editors' .DS. 'jce' .DS. 'tiny_mce' .DS. 'plugins';
- $plugins = $this->getPlugins();
-
- foreach($plugins as $plugin) {
- $file = $path .DS. $plugin .DS. 'classes' .DS. 'config.php';
-
- if (file_exists($file)) {
- require_once($file);
- // Create class name
- $class = ucfirst($plugin . 'Config');
-
- // Check class and method
- if(class_exists($class)){
- if (method_exists(new $class, 'getConfig')) {
- call_user_func_array(array($class, 'getConfig'), array(&$vars));
- }
- }
- }
- }
- }
- /**
- * Named wrapper to check access to a feature
- *
- * @access public
- * @param string The feature to check, eg: upload
- * @param string The defalt value
- * @return string
- */
- function checkUser()
- {
- if ($this->group) {
- return true;
- }
- return false;
- }
- /**
- * XML encode a string.
- *
- * @access public
- * @param string String to encode
- * @return string Encoded string
- */
- function xmlEncode($string)
- {
- return preg_replace(array('/&/', '/</', '/>/', '/\'/', '/"/'), array('&', '<', '>', ''', '"'), $string);
- }
- /**
- * XML decode a string.
- *
- * @access public
- * @param string String to decode
- * @return string Decoded string
- */
- function xmlDecode($string)
- {
- return preg_replace(array('&', '<', '>', ''', '"'), array('/&/', '/</', '/>/', '/\'/', '/"/'), $string);
- }
- }
- ?>