* @author Denis Flaven * @license http://www.opensource.org/licenses/gpl-3.0.html LGPL */ class UIHTMLEditorWidget { protected $m_iId; protected $m_sAttCode; protected $m_sNameSuffix; protected $m_sFieldPrefix; protected $m_sHelpText; protected $m_sValidationField; protected $m_sValue; protected $m_sMandatory; public function __construct($iInputId, $sAttCode, $sNameSuffix, $sFieldPrefix, $sHelpText, $sValidationField, $sValue, $sMandatory) { $this->m_iId = $iInputId; $this->m_sAttCode = $sAttCode; $this->m_sNameSuffix = $sNameSuffix; $this->m_sHelpText = $sHelpText; $this->m_sValidationField = $sValidationField; $this->m_sValue = $sValue; $this->m_sMandatory = $sMandatory; $this->m_sFieldPrefix = $sFieldPrefix; } /** * Get the HTML fragment corresponding to the HTML editor widget * @param WebPage $oP The web page used for all the output * @param Hash $aArgs Extra context arguments * @return string The HTML fragment to be inserted into the page */ public function Display(WebPage $oPage, $aArgs = array()) { $iId = $this->m_iId; $sCode = $this->m_sAttCode.$this->m_sNameSuffix; $sValue = $this->m_sValue; $sHelpText = $this->m_sHelpText; $sValidationField = $this->m_sValidationField; $sHtmlValue = "
$sValidationField
"; // Replace the text area with CKEditor // To change the default settings of the editor, // a) edit the file /js/ckeditor/config.js // b) or override some of the configuration settings, using the second parameter of ckeditor() $sLanguage = strtolower(trim(UserRights::GetUserLanguage())); $oPage->add_ready_script("$('#$iId').ckeditor(function() { /* callback code */ }, { language : '$sLanguage' , contentsLanguage : '$sLanguage' });"); // Transform $iId into a CKEdit // Please read... // ValidateCKEditField triggers a timer... calling itself indefinitely // This design was the quickest way to achieve the field validation (only checking if the field is blank) // because the ckeditor does not fire events like "change" or "keyup", etc. // See http://dev.ckeditor.com/ticket/900 => won't fix // The most relevant solution would be to implement a plugin to CKEdit, and handle the internal events like: setData, insertHtml, insertElement, loadSnapshot, key, afterUndo, afterRedo // Could also be bound to 'instanceReady.ckeditor' $oPage->add_ready_script("$('#$iId').bind('validate', function(evt, sFormId) { return ValidateCKEditField('$iId', '', {$this->m_sMandatory}, sFormId, '') } );"); return $sHtmlValue; } } ?>