* @license http://www.contenido.org/license/LIZENZ.txt * @link http://www.4fb.de * @since file available since 2008-05-07 * * {@internal * created 2008-05-07 * }} * * $Id$ */ /** * * Description: Class for handling and displaying edit_area * * @version 1.0.0 * @author Timo Trautmann * @copyright four for business AG * * {@internal * created 2008-05-07 * }} * */ class EditArea { /** * Properties which were used to init edit_area * * @var array * @access private */ var $aProperties; /** * HTML-ID of textarea which is replaced by edit_area * * @var string * @access private */ var $sTextareaId; /** * defines if textarea is used or not (by system/client/user property) * * @var boolean * @access private */ var $bActivated; /** * defines if js-script for edit_area is included on rendering process * * @var boolean * @access private */ var $bAddScript; /** * The contenido configuration array * * @var array * @access private */ var $aCfg; /*################################################################*/ /** * Constructor of EditArea initializes class variables * * @param string $sId - The id of textarea which is replaced by editor * @param string $sSyntax - Name of syntax highlighting which is used (html, css, js, php, ...) * @param string $sLang - lang which is used into editor. Notice NOT Contenido language id * ex: de, en ... To get it from contenido language use: * substr(strtolower($belang), 0, 2) in backend * @param boolean $bAddScript - defines if edit_area script is included or not * interesting when there is more than only one editor on page * @param array $aCfg - The contenido configuration array * @param boolean $bEditable - Optional defines if content is editable or not * * @access public */ function __construct($sId, $sSyntax, $sLang, $bAddScript, $aCfg, $bEditable = true) { //datatype check $sId = (string) $sId; $sSyntax = (string) $sSyntax; $aCfg = (array) $aCfg; $sLang = (string) $sLang; //init class variables $this->aProperties = array(); $this->aCfg = $aCfg; $this->bAddScript = $bAddScript; $this->sTextareaId = $sId; $this->bActivated = true; //set standard properties for editor which were static or defined by constructor param $this->setProperty('start_highlight', 'true', true); $this->setProperty('allow_resize', 'both', false); $this->setProperty('allow_toggle', 'false', true); $this->setProperty('language', $sLang, false); $this->setProperty('save_callback', 'save_callback', false); $this->setProperty('syntax', $sSyntax, false); $this->setProperty('replace_tab_by_spaces', '4', true); $this->setProperty('plugins', 'charmap', false); $this->setProperty('toolbar', 'save, search, go_to_line, fullscreen, |, undo, redo, |, select_font,|, change_smooth_selection, highlight, reset_highlight, |, charmap, |, help', false); //make content not editable if not allowed if ($bEditable == false) { $this->setProperty('is_editable', 'false', true); } else { $this->setProperty('is_editable', 'true', true); } //internal function which appends more properties to $this->setProperty wich where defined //by user or sysadmin in systemproperties / client settings / user settings ... $this->getSystemProperties(); } /** * Function gets properties from contenido for edit_area and stores it into * $this->setProperty so user is able to overwride standard settings or append * other settings. Function also checks if edit_area is activated or deactivated * by user * * @access private */ function getSystemProperties() { //check if editor is disabled or enabled by user/admin if (getEffectiveSetting("edit_area", "activated", "true") == "false") { $this->bActivated = false; } $aUserSettings = getEffectiveSettingsByType("edit_area"); foreach ($aUserSettings as $sKey => $sValue) { if ($sKey != 'activated') { if ($sValue == "true" || $sValue == "false" || is_numeric($sValue)) { $this->setProperty($sKey, $sValue, true); } else { $this->setProperty($sKey, $sValue, false); } } } } /** * Function for setting a property for edit_area to $this->setProperty * existing properties were overwritten * * @param string $sName - Name of edit_area property * @param string $sValue - Value of edit_area property * @param boolean $bIsNumeric - Defines if value is numeric or not * in case of a numeric value, there is no need to use * quotes * * @access public */ function setProperty($sName, $sValue, $bIsNumeric) { //datatype check $sName = (string) $sName; $sValue = (string) $sValue; $bIsNumeric = (boolean) $bIsNumeric; //generate a new array for new property $aRecord = array(); $aRecord['name'] = $sName; $aRecord['value'] = $sValue; $aRecord['is_numeric'] = $bIsNumeric; //append it to class variable $this->aProperties //when key already exists, overwride it $this->aProperties[$sName] = $aRecord; } /** * Function renders js_script for inclusion into an header of a html file * * @return string - js_script for edit_area * @access public */ function renderScript() { //if editor is disabled, there is no need to render this script if ($this->bActivated == false) { return ''; } //if external js file for editor should be included, do this here $sJs = ''; if ($this->bAddScript) { $sPath = $this->aCfg['path']['contenido_fullhtml']; $sJs .= ''."\n"; $sJs .= ''; } //define template for edit_area script $sJs .= ''; //get all stored properties and convert it in order to insert it into edit_area js template $sProperties = ''; foreach ($this->aProperties as $aProperty) { if ($aProperty['is_numeric'] == true) { $sProperties .= ', '.$aProperty['name'].':'.$aProperty['value']."\n"; } else { $sProperties .= ', '.$aProperty['name'].': "'.$aProperty['value']."\"\n"; } } //fill js template, using sprintf $sTextareaId = $this->sTextareaId; $sJsResult = sprintf($sJs, $sTextareaId, $sTextareaId, $sTextareaId, $sTextareaId, $sProperties, $sTextareaId); return $sJsResult; } } ?>