require_once 'HTML/QuickForm/textarea.php';
class Backoffice_Form_fckeditor extends HTML_QuickForm_textarea
{
protected $options = array(
'basePath' => '/FCKeditor/',
'width' => '100%',
'height' => '200',
'toolbarSet' => 'Default',
'config' => array()
);
public function Backoffice_Form_fckeditor($elementName = null, $elementLabel = null, $attributes = null, $options = null)
{
parent::HTML_QuickForm_textarea($elementName, $elementLabel, $attributes);
$this->_type = 'fckeditor';
if (null !== $options) {
$this->options = array_merge($this->options, $options);
}
}
public function toHtml()
{
if ($this->isFrozen() || !$this->isBrowserSupported()) {
return parent::toHtml();
} else {
$name = $this->getName();
$value = htmlspecialchars($this->getValue());
$link = $this->options['basePath'] . 'editor/fckeditor.html?InstanceName=' . $name .
('' == $this->options['toolbarSet']? '': '&Toolbar=' . $this->options['toolbarSet']);
return '<input type="hidden" id="' . $name . '" name="' . $name . '" value="' . $value . '" />' .
'<input type="hidden" id="' . $name . '___Config" value="' . $this->getConfigString() . '" />' .
'<iframe id="' . $name . '___Frame" src="' . $link . '" width="' . $this->options['width'] .
'" height="' . $this->options['height'] . '" frameborder="no" scrolling="no"></iframe>';
}
}
protected function isBrowserSupported()
{
$sAgent = $_SERVER['HTTP_USER_AGENT'];
if (strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false) {
$iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3);
return ($iVersion >= 5.5) ;
} elseif (strpos($sAgent, 'Gecko') !== false) {
$iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ;
return ($iVersion >= 20030210) ;
}
return false;
}
protected function getConfigString()
{
$params = array();
foreach ($this->options['config'] as $key => $value) {
if (true === $value) {
$hValue = 'true';
} elseif (false === $value) {
$hValue = 'false';
} else {
$hValue = htmlspecialchars($value);
}
$params[] = htmlspecialchars($key) . '=' . $hValue;
}
return implode('&', $params);
}
}