Add is_escaped attribute for html_select and html_textarea (#1488485)
| | |
| | | CHANGELOG Roundcube Webmail |
| | | =========================== |
| | | |
| | | - Add is_escaped attribute for html_select and html_textarea (#1488485) |
| | | - Fix HTML entities handling in HTML editor (#1488483) |
| | | - Fix listing shared folders on Courier IMAP (#1488466) |
| | | - Fix issue where draft auto-save wasn't executed after some inactivity time |
| | |
| | | } |
| | | } |
| | | else { |
| | | $attrib_arr[] = $key . '="' . self::quote($value) . '"'; |
| | | $attrib_arr[] = $key . '="' . self::quote($value, true) . '"'; |
| | | } |
| | | } |
| | | |
| | |
| | | /** |
| | | * Replacing specials characters in html attribute value |
| | | * |
| | | * @param string $str Input string |
| | | * @param string $str Input string |
| | | * @param bool $validate Enables double quotation prevention |
| | | * |
| | | * @return string The quoted string |
| | | */ |
| | | public static function quote($str) |
| | | public static function quote($str, $validate = false) |
| | | { |
| | | $str = htmlspecialchars($str, ENT_COMPAT, RCMAIL_CHARSET); |
| | | |
| | | // avoid douple quotation of & |
| | | // @TODO: get rid of it? |
| | | $str = preg_replace('/&([A-Za-z]{2,6}|#[0-9]{2,4});/', '&\\1;', $str); |
| | | // @TODO: get rid of it |
| | | if ($validate) { |
| | | $str = preg_replace('/&([A-Za-z]{2,6}|#[0-9]{2,4});/', '&\\1;', $str); |
| | | } |
| | | |
| | | return $str; |
| | | } |
| | |
| | | unset($this->attrib['value']); |
| | | } |
| | | |
| | | if (!empty($value) && !preg_match('/mce_editor/', $this->attrib['class'])) { |
| | | $value = self::quote($value); |
| | | if (!empty($value) && empty($this->attrib['is_escaped'])) { |
| | | $value = self::quote($value, true); |
| | | } |
| | | |
| | | return self::tag($this->tagname, $this->attrib, $value, |
| | |
| | | 'selected' => (in_array($option['value'], $select, true) || |
| | | in_array($option['text'], $select, true)) ? 1 : null); |
| | | |
| | | $this->content .= self::tag('option', $attr, self::quote($option['text'])); |
| | | $option_content = $option['text']; |
| | | if (empty($this->attrib['is_escaped'])) { |
| | | $option_content = self::quote($option_content, true); |
| | | } |
| | | |
| | | $this->content .= self::tag('option', $attr, $option_content); |
| | | } |
| | | |
| | | return parent::show(); |
| | |
| | | $attrib = $hook['attribs']; |
| | | |
| | | if ($type == 'select') { |
| | | $attrib['is_escaped'] = true; |
| | | $select = new html_select($attrib); |
| | | |
| | | // add no-selection option |
| | | if ($attrib['noselection']) { |
| | | $select->add($rcmail->gettext($attrib['noselection']), ''); |
| | | $select->add(html::quote($rcmail->gettext($attrib['noselection'])), ''); |
| | | } |
| | | |
| | | $rcmail->render_folder_tree_select($a_mailboxes, $mbox_name, $attrib['maxlength'], $select, $attrib['realnames']); |
| | |
| | | */ |
| | | public function folder_selector($p = array()) |
| | | { |
| | | $p += array('maxlength' => 100, 'realnames' => false); |
| | | $p += array('maxlength' => 100, 'realnames' => false, 'is_escaped' => true); |
| | | $a_mailboxes = array(); |
| | | $storage = $this->get_storage(); |
| | | |
| | |
| | | $select = new html_select($p); |
| | | |
| | | if ($p['noselection']) { |
| | | $select->add($p['noselection'], ''); |
| | | $select->add(html::quote($p['noselection']), ''); |
| | | } |
| | | |
| | | $this->render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $select, $p['realnames'], 0, $p); |
| | |
| | | } |
| | | } |
| | | |
| | | $select->add(str_repeat(' ', $nestLevel*4) . $foldername, $folder['id']); |
| | | $select->add(str_repeat(' ', $nestLevel*4) . html::quote($foldername), $folder['id']); |
| | | |
| | | if (!empty($folder['folders'])) { |
| | | $out .= $this->render_folder_tree_select($folder['folders'], $mbox_name, $maxlength, |
| | |
| | | if ($isHtml) { |
| | | $MESSAGE_BODY = htmlentities($MESSAGE_BODY, ENT_NOQUOTES, RCMAIL_CHARSET); |
| | | $attrib['class'] = 'mce_editor'; |
| | | $attrib['is_escaped'] = true; |
| | | $textarea = new html_textarea($attrib); |
| | | $out .= $textarea->show($MESSAGE_BODY); |
| | | } |
| | |
| | | |
| | | // Enable TinyMCE editor |
| | | if ($IDENTITY_RECORD['html_signature']) { |
| | | $form['signature']['content']['signature']['class'] = 'mce_editor'; |
| | | $form['signature']['content']['signature']['class'] = 'mce_editor'; |
| | | $form['signature']['content']['signature']['is_escaped'] = true; |
| | | } |
| | | |
| | | $IDENTITY_RECORD['signature'] = htmlentities($IDENTITY_RECORD['signature'], ENT_NOQUOTES, RCMAIL_CHARSET); |